【问题标题】:Why comparing objects and array of objects is different为什么比较对象和对象数组不同
【发布时间】:2018-02-07 13:06:29
【问题描述】:

为什么我比较

var a = {id: 1, status: true};
var b = {id: 1, status: true};
console.log(a == b);

它返回false

当我比较时

var array1 = [{id: 1, status: true}, {id:1, status: true}];
var array2 = [{id: 1, status: true}, {id:1, status: true}];
console.log(array1[0] == array2[0]);

它返回false

但是当我比较时

var a = {id: 1, status: true};
var b = {id: 1, status: true};
var array1 = [a, b];
var array2 = [a, b];
console.log(array1[0] == array2[0]);

它返回true?

【问题讨论】:

  • 因为在最后一种情况下,引用是相同的a

标签: javascript arrays boolean compare


【解决方案1】:

== 检查操作数引用。 array1array2 有不同的引用。但是array1[0]array2[0] 具有相同的引用(a),所以array1[0] == array2[0] 返回true

【讨论】:

  • 所以array1[0] === array2[0] 应该返回false?因为它没有
  • 不,它应该返回 true。具有完全相同的参考 (a)
  • 我想我明白了,它是在比较引用而不是对象,对吗?
  • 没错,它比较的是引用而不是实例值
【解决方案2】:

您正在比较两个相同但不同的对象。哪个会并且应该返回false。如果您希望它返回 true,它应该如下所示:

var a = {id: 1, status: true};
var b = a;
console.log(a == b);

它们是否在数组中并不重要。这同样适用于数组。如果比较两个数组,即使它们相同也会返回 false,除非变量指向同一个数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多