所以我遇到了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]功能是如何工作的?谢谢!
答案 0 :(得分:7)
在第一次迭代中,它将传递if
语句并因此分配它:
someobject['cat'] = 0;
在下一个,它正在做:
if (someobject['cat']) ...
是:
if (0) ...
并且0
是假的,因此它会将其再次分配给下一个索引,即1
。
使用备选方案,hasOwnProperty
会检查它是否存在,即使它已设置为0
。