当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《JavaScript中==和===之间的区别》经验,为你挑选了2个好方法。

看看这里: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

谢谢你的答案!我想如果与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认同)


Jack Sleight.. 1170

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

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

两个字符串在相应位置具有相同的字符序列,相同的长度和相同的字符时严格相等.

两个数字在数值上相等(具有相同的数值)时严格相等.NaN不等于任何东西,包括NaN.正负零彼此相等.

如果两个布尔操作数都为真或两者都为假,则它们严格相等.

如果两个对象的引用相同,则两个对象严格相等Object.

NullUndefined类型是==(但不是===).[即(Null==Undefined)是true但是(Null===Undefined)是false]

比较运算符 - MDC



1> sdfx..:

看看这里: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


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

2> Jack Sleight..:

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

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

两个字符串在相应位置具有相同的字符序列,相同的长度和相同的字符时严格相等.

两个数字在数值上相等(具有相同的数值)时严格相等.NaN不等于任何东西,包括NaN.正负零彼此相等.

如果两个布尔操作数都为真或两者都为假,则它们严格相等.

如果两个对象的引用相同,则两个对象严格相等Object.

NullUndefined类型是==(但不是===).[即(Null==Undefined)是true但是(Null===Undefined)是false]

比较运算符 - MDC


-1问题是"有什么区别?" 你只解释了严格的运算符,但没有解释它们与非严格运算符之间的区别
我没有完全得到*"如果两个对象引用相同的对象,它们是完全相同的"* - 什么?通过两个对象,它是否意味着两个引用变量..?
上面的声音听起来似乎= =比较不会检查第一个项目符号点中的所有内容,"相同位置的相同字符序列,相同长度和相同字符",但事实上确实如此.在比较两个字符串时,我可以说唯一真正的区别是===,`new String()=== new String()`返回false(不同的对象引用).但无论如何应该避免使用`new String`.
所以,如果我这样做:`if(input == null)...`,当输入未定义时,它是否也会使条件为真?
推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有