迭代字典时的 hasOwnProperty

Mat*_*ger 5 javascript resharper

我对 javascript 很陌生,我正在尝试迭代字典键/值。(是的,我在这里读了一些帖子,但没有找到答案。)

这是我的字典:

showhidedict = {
    0: ["a"],
    1: [],
    2: ["a", "b"],
    3: []
};
Run Code Online (Sandbox Code Playgroud)

这是我的迭代:

for (var value in showhidedict)
    $("#" + showhidedict[value]).hide();
Run Code Online (Sandbox Code Playgroud)

resharper 建议我将 -check 添加 hasOwnProperty 到循环中:

if (showhidedict.hasOwnProperty(value))
Run Code Online (Sandbox Code Playgroud)

但为什么?

-check hasOwnProperty 检查对象是否具有属性(这里是字典是否包含键),对吗?但我真的需要支票吗?由于我迭代了键,我知道所有键都必须存在。还有其他原因需要添加支票吗?

Gib*_*boK 3

通常建议始终使用 hasOwnProperty,因为它指示对象本身是否具有指定的属性,并避免在其原型链中查找。

一般来说,您永远不应该假设代码运行的环境,或者您的对象何时由不同的库创建,或者原型是否已扩展,因此 hasOwnProperty 使您的代码“更安全”。

有关原型链的更多信息。

引用Object.prototype.hasOwnProperty()