JavaScript中==和===之间的区别

Shi*_*iva 1592 javascript comparison-operators equality-operator identity-operator

可能重复:
Javascript === vs ==:我使用哪个"相等"运算符是否重要?

=====JavaScript有什么区别?我也见过!=!==运营商.还有更多这样的运营商吗?

sdf*_*dfx 1924

看看这里:http://longgoldenears.blogspot.com/2007/09/triple-equals-in-javascript.html

3个等号表示"没有类型强制的平等".使用三等于,值也必须在类型上相等.

0 == false   // true
0 === false  // false, because they are of a different type
1 == "1"     // true, automatic type conversion for value only
1 === "1"    // false, because they are of a different type
null == undefined // true
null === undefined // false
'0' == false // true
'0' === false // false
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的答案!我想如果与C#相比,==也将==和===将转换为.Equals() (82认同)
  • @ hrishikeshp19:在这种情况下,值实际上是不同的(不同的对象引用) (40认同)
  • @KoenZomers我不认为你的C#案例是对的.实际上C#中没有等价物.==在C#中做一个引用比较,而Equals做预定义的比较,它们都没有JavaScript中的等价物. (19认同)
  • 那么"new String()=== new String()",值和类型都是一样的.但声明返回false. (12认同)
  • @ hrishikeshp19,`new String()`不是字符串类型,它是对象类型,因此对象的===规则适用.但是,原始字符串的使用通常会导致将字符串强制转换为"String"对象,因此差异很小.如果要将`new String()`分配给两个不同的对象`s1`和`s2`,则每个对象的`valueOf()`方法将为每个对象返回一个字符串原语,并且`s1.valueOf()== = s2.valueOf()`将返回`true`. (3认同)
  • 有人可以解释为什么`true =="true"``是'false`? (3认同)

Jac*_*ght 1170

===并且!==是严格的比较运算符:

JavaScript具有严格和类型转换相等比较.为了strict相等,被比较的对象必须具有相同的类型,并且:

  • 两个字符串在相应位置具有相同的字符序列,相同的长度和相同的字符时严格相等.
  • 两个数字在数值上相等(具有相同的数值)时严格相等.NaN不等于任何东西,包括NaN.正负零彼此相等.
  • 如果两个布尔操作数都为真或两者都为假,则它们严格相等.
  • 如果两个对象的引用相同,则两个对象严格相等Object.
  • NullUndefined类型是==(但不是===).[即(Null==Undefined)是true但是(Null===Undefined)是false]

比较运算符 - MDC

  • -1问题是"有什么区别?" 你只解释了严格的运算符,但没有解释它们与非严格运算符之间的区别 (173认同)
  • 我没有完全得到*"如果两个对象引用相同的对象,它们是完全相同的"* - 什么?通过两个对象,它是否意味着两个引用变量..? (7认同)
  • 上面的声音听起来似乎= =比较不会检查第一个项目符号点中的所有内容,"相同位置的相同字符序列,相同长度和相同字符",但事实上确实如此.在比较两个字符串时,我可以说唯一真正的区别是===,`new String()=== new String()`返回false(不同的对象引用).但无论如何应该避免使用`new String`. (5认同)
  • 所以,如果我这样做:`if(input == null)...`,当输入未定义时,它是否也会使条件为真? (4认同)