Javascript Array.indexOf() 在应用于对象数组时显示奇怪的行为

标签 javascript arrays object indexof

我创建了以下代码 http://jsfiddle.net/EbCUx/

var arr = [{a:1,b:2,c:3},{a:3,b:5,c:6}];
var a = arr[0];
alert(arr.indexOf(a));
var b = {a:1,b:2,c:3};
alert(arr.indexOf(b));

尽管a和b的内容相同,为什么indexOf()返回-1.. 我知道 a 是一个引用值..这就是原因吗...有人可以向我解释确切的原因吗​​?

最佳答案

您正在比较两个不同的对象,它们内部恰好具有相同的值,但从相等的 Angular 来看它们仍然是不同的对象。

您的原始代码:

<script>
    var arr = [{a:1,b:2,c:3},{a:3,b:5,c:6}];
    var a = arr[0];
    alert(arr.indexOf(a));
    var b = {a:1,b:2,c:3};
    alert(arr.indexOf(b));
</script>

更新版本,展示如何在比较中获得匹配项。

<script>
    var b = {a:1,b:2,c:3};
    var arr = [b,{a:3,b:5,c:6}];
    var a = arr[0];
    alert(arr.indexOf(a));
    alert(arr.indexOf(b));
</script>

如果您想比较两个恰好具有相同值的不同对象,则必须手动执行此操作。

关于Javascript Array.indexOf() 在应用于对象数组时显示奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10438373/

相关文章:

javascript - 什么是 JavaScript 数组突变?

python - “Int”对象没有属性

javascript - 在循环返回之前等待 http 成功 - Angular 4

javascript - 为什么这会导致最大调用堆栈错误?

javascript - onclick 函数内的 fadeOut

javascript - fancybox - 向 iframe 添加类以进行样式设置

JavaScript嵌套数组过滤问题

arrays - std::arrays 的 std::vector 的比较函数

c++对象数组,初始化失败

delphi - 为什么 TValue.Make 需要一个指向对象引用的指针?