所以我一直遇到一个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;
}
};
Run Code Online (Sandbox Code Playgroud)
现在,如果我没有弄错的话,预期的输出应该如下:
someObject = {
'cat': 0,
'dog': 3,
'cow': 6,
'horse': 7
}
Run Code Online (Sandbox Code Playgroud)
但是我得到的是:
someObject = {
'cat': 1,
'dog': 3,
'cow': 6,
'horse': 7
}
Run Code Online (Sandbox Code Playgroud)
笏.
此外,当我切换到使用以下内容时,问题得到解决:
someArray.some(function(animal, index) {
if (!someObject.hasOwnProperty(animal)) {
someObject[animal] = index;
}
});
Run Code Online (Sandbox Code Playgroud)
WAT.不是因为我已经找到了上面的解决方案,这不是一个问题,我只是好奇我是否不理解对象[property]功能是如何工作的?谢谢!
在第一次迭代中,它将传递if语句并因此分配它:
someobject['cat'] = 0;
Run Code Online (Sandbox Code Playgroud)
在下一个,它正在做:
if (someobject['cat']) ...
Run Code Online (Sandbox Code Playgroud)
这是:
if (0) ...
Run Code Online (Sandbox Code Playgroud)
并且0是假的,所以它再次将它分配给下一个索引,即1.
使用替代方法,hasOwnProperty检查它是否存在,即使它已设置为0.