2

所以,我正在检查列表(哈希)中的一个键,我必须以两种不同的方式对其进行编码,但忘记删除它的一部分。哈哈。但对我来说,看着它 - 它似乎是多余的。是这样吗?

 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 和 hasOwnProperty

如何检查对象是否在 JavaScript 中具有属性?

但我的用法似乎更加温和。既然我在这里声明了 var key ,它不是本地的,我不必担心原型链冲突?

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

所以,我的两个问题是:

既然我在这里声明了 var key ,它不是本地的,我不必担心原型链冲突?

即使不需要,我在这里的用法会被认为是“不良形式”吗?我想保持某些编码标准 - 但也许我的意图在这里是错误的。

4

2 回答 2

3

这与key您需要担心的地方无关。它是对象本身。

Object.prototype[1] = 1;

var somelist = {}

for (var key in somelist) {
    alert(key);
}

// '1' was alerted
于 2013-11-09T00:57:51.843 回答
1

您只需通过该检查使您的代码更加健壮,建议将其作为最佳实践。但是,为了保持意图浅显,我通常会做一个倒置模式:

for( var key in obj ) {
    if( !obj.hasOwnProperty( key ) ) {
        continue;
    }

    // do something
}

Jo So 指出了潜在的冲突,但您的数据也可能会发生变化,然后您的代码可能会中断。软件开发的黄金法则:预期失败。

于 2013-11-09T01:01:52.843 回答