2015-09-11 4 views
3

, поэтому я сталкивался с странной проблемой с объектами javascript. Может быть, это просто недостаток знаний (относительно новых для JS), или часть странного мира JS, но здесь идет:Объект доступа к объекту Javascript

Всякий раз, когда я пытаюсь проверить, если объект имеет некоторое свойство, то есть:

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. Не то, чтобы это было проблемой, так как я понял это решение, мне просто интересно узнать, не работает ли функция объекта [свойство]? Благодаря!

+0

Что вы подразумеваете под WAT? –

+1

@AmitJoki Возможно, это: [wat] (https://www.destroyallsoftware.com/talks/wat) –

+0

@JamesThorpe благодарит, что это должно быть, хотя будет выглядеть позже, никогда не собираюсь делать это с 32kbps: p –

ответ

7

На первой итерации, она будет проходить if заявление и назначить его таким образом:

someobject['cat'] = 0; 

На следующий, он делает:

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

который:

if (0) ... 

И 0 является ложным, поэтому он снова присваивает его следующему индексу x, т.е. 1.

С альтернативой hasOwnProperty проверяет, что он существует вообще, даже если он установлен на 0.

+0

ничего себе, не могу поверить, я пропустил это> _ <Спасибо! Полагаю, я всегда думал о том, что он используется, если он существует, а не фактическая ценность. Теперь имеет смысл. Еще раз спасибо! –

+0

Примите этот ответ за несколько минут, когда он позволит мне. –