【发布时间】:2017-01-07 15:18:41
【问题描述】:
我对 javascript 很陌生,我正在尝试迭代字典键/值。 (是的,我在这里阅读了一些帖子,但没有找到答案。)
这是我的字典:
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" in obj将为真),即使obj.hasOwnProperty("foo")为假。 -
Resharper 所做的是建议您确保您的数据结构有效。所以,当你从对象中取出一些元素时,你并没有抛出。
-
您的
hasOwnProperty支票形式错误。应该是if (Object.prototype.hasOwnProperty.call(showhidedict, value));否则,如果showhidedict中的数据属性之一被称为hasOwnProperty,代码将崩溃。 -
@melpomene 好的,但这就是 resharper 的建议
-
hasOwnProperty的 MDN 文档也很有帮助。
标签: javascript resharper