严格相等对变量有效,但对对象无效 [重复]

Strict equality works on variables but not on objects [duplicate]

提问人:Shiran Abbasi 提问时间:3/23/2019 更新时间:3/23/2019 访问量:52

问:

我有一个变量定义为:

var o = new String("0");

在控制台中,当我写:

o === o

它返回,但是当我写:true

new String("0") === new String("0")

它返回false

我不明白为什么它对变量引用起作用,而对对象不起作用?

我试过:

(new String("0")) === (new String("0"))

因为问题可能是由于运算符优先级而出现的,但它仍然会返回false

JavaScript 对象 javascript-objects 相等

评论

1赞 Nina Scholz 3/23/2019
它通过检查身份对对象精确地工作。
0赞 Robin 3/23/2019
是的,它返回 false,据我所知,为了严格相等,您需要比较两个确切的值。在控制台上使用它,它返回 true。new String(“0”).value === new String(“0”).value;
2赞 VLAZ 3/23/2019
@Robin严格的平等与这个例子无关。严格相等只是意味着如果两个值的类型不正确,它将失败,松散相等适用于 - 一个 strng 和一个数字,它们在转换时仍然表示相同的数据。问题在于两个不同的对象总是不同的,因此相等性失败了。 或者不检查它们的内容,但如果它们实际上是一个相同的对象实例。0 == "0"=====
0赞 Robin 3/23/2019
@VLAZ是的,我明白。使用 == 时,它比较的是值,而不是类型。但是,当您使用 === 时,它会同时比较值和类型。这是对的吗?顺便说一句,“@js_tut”昨天在推特上谈到了这一点,并清楚地解释了。

答:

0赞 Vardan Gupta 3/23/2019 #1
 new String("0") === new String("0")

在这里,您正在比较具有不同引用的两个不同字符串。这就是为什么你得到错误。

 o === o

在这里,您实际上是在比较相同的字符串(在本例中引用相同)。

评论

0赞 Shiran Abbasi 3/23/2019
哦,那是我的错。谢谢