所以,我正在检查列表中的密钥(哈希),我必须以两种不同的方式对其进行编码,但忘记删除它。大声笑。但对我来说,看着它 - 看起来多余。是这种情况吗?
var somelist = {
a : 'somevalue1',
b : 'somevalue1',
c : 'somevalue1',
d : 'somevalue1',
e : 'somevalue1',
f : 'somevalue1'
}
for(var key in somelist ){
if(somelist.hasOwnProperty(key)){ // <-- redundant
// do something
}
}
如果我们通过键循环 - 那么假设是,它是列表的属性,是吗?我想确保我的大脑没有油炸。 : - )
我查看了这两篇文章:
How do I check if an object has a property in JavaScript?
但我的使用似乎更加温和。由于我在这里声明var键,是不是本地的,我不必担心原型链碰撞?
所以,似乎在我的使用中 - 它是多余的或不需要 - 但这会被认为是“糟糕的形式”。看来因为我没有这个哈希坐在构造函数中,所以我不必担心原型继承等......
所以,我的两个问题是:
由于我在这里声明var键,是不是本地的,我不必担心原型链碰撞?
即使不需要,我在这里的使用会被视为“糟糕的形式”吗?我想保留一定的编码标准 - 但也许我的意图在这里是错误的。
答案 0 :(得分:3)
这不是你必须担心的key
。这是对象本身。
Object.prototype[1] = 1;
var somelist = {}
for (var key in somelist) {
alert(key);
}
// '1' was alerted
答案 1 :(得分:1)
您只需在执行该检查时使代码更加健壮,建议将其作为最佳做法。但是,为了保持意图浅,我通常做一个倒置的模式:
for( var key in obj ) {
if( !obj.hasOwnProperty( key ) ) {
continue;
}
// do something
}
Jo So指出了一个潜在的冲突,但你的数据可能只会改变,然后你的代码就会崩溃。软件开发的黄金法则:期待失败。