Я довольно новичок в javascript, и я пытаюсь перебирать ключ/значения словарей. (И да, я прочитал несколько постов здесь, но не нашел answere для.)hasOwnProperty при итерации по словарю
Так что это мой словарь:
showhidedict = {
0: ["a"],
1: [],
2: ["a", "b"],
3: []
};
это моя итерация:
for (var value in showhidedict)
$("#" + showhidedict[value]).hide();
ReSharper предлагает мне добавить hasOwnProperty
-check в петлю:
if (showhidedict.hasOwnProperty(value))
Но почему?
hasOwnProperty
-check проверяет, имеет ли объект атрибут (здесь, содержит ли словарь ключ), правильно? Но мне действительно нужен чек? Поскольку я перебираю ключи, я знаю, что все ключи должны существовать. Есть ли другие вопросы, почему я должен добавить чек?
Объекты наследуют свойства от других объектов, то есть 'obj [" foo "]' может возвращать значение (и '' foo "в obj' будет истинным), даже если' obj.hasOwnProperty ("foo") 'false , – melpomene
Что делает Resharper ** sugesting **, чтобы убедиться, что ваша структура данных действительна. Итак, когда вы берете какой-то элемент из объекта, вы не выбрасываете его. –
Ваша форма проверки 'hasOwnProperty' неверна. Это должно быть 'if (Object.prototype.hasOwnProperty.call (showhideict, value))'; иначе код выйдет из строя, если одно из свойств данных в 'showhidedict' называется' hasOwnProperty'. – melpomene