Javascript对象访问者的怪异

时间:2015-09-11 16:07:00

标签: javascript object

所以我遇到了javascript对象的奇怪问题。也许这只是缺乏知识(相对较新的JS),或JS的奇怪世界的一部分,但它在这里:

每当我尝试检查对象是否具有某些属性时,即:

var someObject = {};
var someArray = ['cat', 'cat', 'cat', 'dog', 'dog', 'dog', 'cow', 'horse'];
someArray.some(function(animal, index) {
    if (!someObject[animal]) {
        someObject[animal] = index;
    }
};

现在,如果我没有弄错的话,预期的输出应该如下:

someObject = {
    'cat': 0,
    'dog': 3,
    'cow': 6,
    'horse': 7
}
然而,我得到的是:

someObject = {
    'cat': 1,
    'dog': 3,
    'cow': 6,
    'horse': 7
}

笏。

此外,当我切换到使用以下内容时,问题得以解决:

someArray.some(function(animal, index) {
     if (!someObject.hasOwnProperty(animal)) {
        someObject[animal] = index;
     }
  });

WAT。不是因为我已经找到了上面的解决方案,这不是一个问题,我只是好奇我是否不理解对象[property]功能是如何工作的?谢谢!

1 个答案:

答案 0 :(得分:7)

在第一次迭代中,它将传递if语句并因此分配它:

someobject['cat'] = 0;

在下一个,它正在做:

if (someobject['cat']) ...

是:

if (0) ...

并且0是假的,因此它会将其再次分配给下一个索引,即1

使用备选方案,hasOwnProperty会检查它是否存在,即使它已设置为0