freeCodeCamp/guide/chinese/miscellaneous/equality-vs-identity-operator/index.md

2.2 KiB
Raw Blame History

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将执行比较两个值所需的所有转换。它似乎非常方便但这种转换的效果可能会令人困惑并且很难跟踪错误。

JavaScriptThe Good Parts ”一书的作者Douglas Crockford建议_===应该在任何地方使用,而不是使用==_运算符来避免潜在的错误。在大多数情况下您应该遵循此建议除非您特别想要利用自动类型转换。