为什么Object.is()在比较2"确切"时返回false。 JavaScript对象值?

时间:2017-02-23 14:05:51

标签: javascript

  

Object.is()方法确定两个值是否相同   值。

     

返回值:表示两者是否的布尔值   参数是相同的值。

我可以使用以下简单类型测试Object.is()

Object.is('hello', 'hello'); // true
Object.is(1, 1); // true
Object.is(null, null); // true

我也在MDN上看到我可以将它用于" window"这样的对象:

Object.is(window, window); // true

当我试图比较2个简单"确切"值似乎不起作用(或者我可能以错误的方式使用它)

拥有这两个简单的对象:

var o1 = {a: "a"};
var o2 = {a: "a"};

所有这些比较都会返回错误!

Object.is(o1, o2); // false
Object.is(o1, {a: "a"}); // false
Object.is({a: "a"}, {a: "a"}); // false

您能否解释一下结果为何错误或我如何以错误的方式使用Object.is()

3 个答案:

答案 0 :(得分:2)

这是因为它们不是同一个参考文献。

注意:

var o1 = {a: "a"};
var o2 = o2;
Object.is(o1, o2);

结果为true

答案 1 :(得分:0)

当我们有一个对象时,我们存储引用而不是值本身。如果您将windowwindow进行比较,则它们会指向相同的对象引用。

您可以使用https://lodash.com/docs/4.17.4#isEqual 比较对象值。

答案 2 :(得分:0)

两个不同的对象永远不会完全相同"。对象相等性基于身份,而不是内容。如果您的应用程序中有关于表示概念上相同信息的对象的某些语义,您可以编写自己的比较代码来进行确定。

在您的代码中,每个{ }对象初始值设定项都会创建一个不同的对象。