2.2 KiB
2.2 KiB
title | localeTitle |
---|---|
Equality Vs Identity Operator | 平等与身份运营商 |
在JavaScript中,有2个运算符可用于比较两个值: ==和=== 。它们似乎完全相同,但它们的工作方式不同,在某些情况下它们会产生不同的结果。
权益运营商
所有必要的类型转换后,等式运算符(==)比较两个值。我们来看几个例子:
0 == '' // -> true
false == 'false' // -> false
在第一个示例中,0和''(空字符串)都经历自动转换。它们都被转换为虚假给予:
false == false
这显然是_真的_ 。在第二个示例_'false'中_ ,非空String被计算为true,使整个表达式为false。
身份运营商
相比之下,当且仅当被比较的两个值具有相同类型且具有相同值时,身份运算符(===)才会返回true。如果我们尝试比较两种不同类型的值,它将始终返回_false_ 。
false === 0 // -> false
0 === '' // -> false
5 === 5 // -> true
确切地说,===检查两个变量是否引用相同的对象,或者在值类型(如_int_ , double , String , _bool_等)的情况下,如果它们都具有相同的值。
var array1 = [ 5, 6, 7 ];
var array2 = [ 5, 6, 7 ];
var array3 = array2;
array1 === array2 // -> false
array1 == array2 // -> false
array2 === array3 // -> true
array2 == array3 // -> true
_array1_和_array2_都具有相同的类型,它们是相同的但是比较_array1 === array2_返回false,因为它们引用不同的对象。 _array2 === array3_返回true,因为两个变量都引用同一个对象。
我应该使用哪个操作员?
理解_==和===_之间的区别但是应该使用哪个运算符很重要?
使用_==_运算符时,JavaScript将执行比较两个值所需的所有转换。它似乎非常方便,但这种转换的效果可能会令人困惑,并且很难跟踪错误。
“ JavaScript:The Good Parts ”一书的作者Douglas Crockford建议_===应该在任何地方使用,而不是使用==_运算符来避免潜在的错误。在大多数情况下,您应该遵循此建议,除非您特别想要利用自动类型转换。