Javascript对象访问器怪异
所以我遇到了一个关于javascript对象的奇怪问题。也许这只是因为缺乏知识(相对较新的JS),或者是JS的怪异世界的一部分,但这里是: 每当我尝试检查对象是否具有某些属性时,即:Javascript对象访问器怪异,javascript,object,Javascript,Object,所以我遇到了一个关于javascript对象的奇怪问题。也许这只是因为缺乏知识(相对较新的JS),或者是JS的怪异世界的一部分,但这里是: 每当我尝试检查对象是否具有某些属性时,即: var someObject = {}; var someArray = ['cat', 'cat', 'cat', 'dog', 'dog', 'dog', 'cow', 'horse']; someArray.some(function(animal, index) { if (!someObject[
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;
}
});
沃特。这不是一个很大的问题,因为我已经想出了上述解决方案,我只是好奇,如果我不了解对象[属性]功能是如何工作的?谢谢 在第一次迭代时,它将传递
if
语句并将其赋值:
someobject['cat'] = 0;
在下一个问题上,它正在做:
if (someobject['cat']) ...
即:
if (0) ...
而且0
是错误的,因此它再次将其分配给下一个索引,即1
另一种选择是,
hasOwnProperty
检查它是否存在,即使它设置为0
你所说的WAT是什么意思?@AmitJoki可能是这样:@JamesThorpe谢谢,一定是这样,不过稍后会看一看,永远不会用32kbps做:谢谢,@JamesThorpe:)每一个程序员都应该看到这段精彩的视频。@AmitJoki哈哈,是的-那不管用:)它值得一看-提醒我们需要记住的所有东西…哇,真不敢相信我错过了><谢谢!我想我一直只是想用它来检查它是否存在,而不是它的实际值。现在完全有道理了。再次感谢!我会在几分钟内接受这个答案。