【问题标题】:Strict equality works on variables but not on objects [duplicate]严格相等适用于变量但不适用于对象[重复]
【发布时间】: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


【解决方案1】:
 new String("0") === new String("0")

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

 o === o

这里,你实际上是在比较同一个字符串(在这种情况下引用是相同的)。

【讨论】:

  • 哦,那是我的错。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
相关资源
最近更新 更多