这个密钥/列表检查是多余的,不是吗?

时间:2013-11-09 00:28:36

标签: javascript

所以,我正在检查列表中的密钥(哈希),我必须以两种不同的方式对其进行编码,但忘记删除它。大声笑。但对我来说,看着它 - 看起来多余。是这种情况吗?

 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
     }
 }

如果我们通过键循环 - 那么假设是,它是列表的属性,是吗?我想确保我的大脑没有油炸。 : - )

我查看了这两篇文章:

for..in and hasOwnProperty

How do I check if an object has a property in JavaScript?

但我的使用似乎更加温和。由于我在这里声明var键,是不是本地的,我不必担心原型链碰撞?

所以,似乎在我的使用中 - 它是多余的或不需要 - 但这会被认为是“糟糕的形式”。看来因为我没有这个哈希坐在构造函数中,所以我不必担心原型继承等......

所以,我的两个问题是:

由于我在这里声明var键,是不是本地的,我不必担心原型链碰撞?

即使不需要,我在这里的使用会被视为“糟糕的形式”吗?我想保留一定的编码标准 - 但也许我的意图在这里是错误的。

2 个答案:

答案 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指出了一个潜在的冲突,但你的数据可能只会改变,然后你的代码就会崩溃。软件开发的黄金法则:期待失败。