Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript对象访问器怪异_Javascript_Object - Fatal编程技术网

Javascript对象访问器怪异

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[

所以我遇到了一个关于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;
     }
  });

沃特。这不是一个很大的问题,因为我已经想出了上述解决方案,我只是好奇,如果我不了解对象[属性]功能是如何工作的?谢谢

在第一次迭代时,它将传递
if
语句并将其赋值:

someobject['cat'] = 0;
在下一个问题上,它正在做:

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

if (0) ...
而且
0
是错误的,因此它再次将其分配给下一个索引,即
1


另一种选择是,
hasOwnProperty
检查它是否存在,即使它设置为
0

你所说的WAT是什么意思?@AmitJoki可能是这样:@JamesThorpe谢谢,一定是这样,不过稍后会看一看,永远不会用32kbps做:谢谢,@JamesThorpe:)每一个程序员都应该看到这段精彩的视频。@AmitJoki哈哈,是的-那不管用:)它值得一看-提醒我们需要记住的所有东西…哇,真不敢相信我错过了><谢谢!我想我一直只是想用它来检查它是否存在,而不是它的实际值。现在完全有道理了。再次感谢!我会在几分钟内接受这个答案。