javascript 中 ‘==’ 和‘===’的区别
转自:
JavaScript 标准参考教程(alpha) 阮一峰 (http://javascript.ruanyifeng.com/)
-------------------------------------------------------------
JavaScript 提供两种相等运算符:==
和===
。
简单说,它们的区别是相等运算符(==
)比较两个值是否相等,严格相等运算符(===
)比较它们是否为“同一个值”。
如果两个值不是同一类型,严格相等运算符(===
)直接返回false
,而相等运算符(==
)会将它们转换成同一个类型,再用严格相等运算符进行比较。
严格相等运算符(===
),如:
1 === "1" // false
true === "true" // false
NaN === NaN // false
+0 === -0 // true
{} === {} // false
[] === [] // false
(function () {} === function () {}) // false
undefined === undefined // true
null === null // true
相等运算符(==
),如:
原始类型的数据会转换成数值类型再进行比较
1 == true // true // 等同于 1 === Number(true) 0 == false // true // 等同于 0 === Number(false) 2 == true // false // 等同于 2 === Number(true) 2 == false // false // 等同于 2 === Number(false) 'true' == true // false // 等同于 Number('true') === Number(true) // 等同于 NaN === 1 '' == 0 // true // 等同于 Number('') === 0 // 等同于 0 === 0 '' == false // true // 等同于 Number('') === Number(false) // 等同于 0 === 0 '1' == true // true // 等同于 Number('1') === Number(true) // 等同于 1 === 1 '\n 123 \t' == 123 // true [1] == 1 // true // 等同于 Number([1]) == 1 [1] == '1' // true // 等同于 Number([1]) == Number('1') [1] == true // true // 等同于 Number([1]) == Number(true)undefined
和null
与其他类型的值比较时,结果都为false
,它们互相比较时结果为true
。 false == null // false false == undefined // false 0 == null // false 0 == undefined // false undefined == null // true
相等运算符的缺点:
相等运算符隐藏的类型转换,会带来一些违反直觉的结果。
0 == '' // true 0 == '0' // true 2 == true // false 2 == false // false false == 'false' // false false == '0' // true false == undefined // false false == null // false null == undefined // true ' \t\r\n ' == 0 // true