【发布时间】:2019-03-23 12:22:02
【问题描述】:
我有一个变量定义为:
var o = new String("0");
我写的时候在控制台中:
o === o
它返回true
但是当我写的时候:
new String("0") === new String("0")
它返回false
我不明白为什么它适用于变量引用而不适用于对象?
我试了一下:
(new String("0")) === (new String("0"))
因为可能由于运算符优先级而出现问题,但它仍然返回false
【问题讨论】:
-
它通过检查身份准确地作用于对象。
-
是的,它返回 false,据我所知,要严格相等,您需要比较两个确切的值。在控制台上使用它,它返回true。 new String("0").value === new String("0").value;
-
@Robin 严格相等与此示例无关。严格相等仅意味着如果两个值的类型不正确,它将失败,松散相等适用于
0 == "0"- 一个字符串和一个在转换时仍表示相同数据的数字。问题是两个不同的对象总是不同的,因此相等性失败的原因。==或===不检查它们的内容,但如果它们实际上是一个且相同的对象实例。 -
@VLAZ 是的,我明白。当您使用 == 时,它会比较值,而不是类型。但是当您使用 === 时,它会比较值和类型。这样对吗 ?顺便说一句,“@js_tut”昨天发了推文并解释清楚。
标签: javascript object javascript-objects equality