【问题标题】:This key / list check is redundant, isn't it?这个键/列表检查是多余的,不是吗?
【发布时间】:2013-11-21 03:51:26
【问题描述】:

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

 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 key,难道不是本地的,不用担心原型链冲突吗?

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

所以,我的两个问题是:

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

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

【问题讨论】:

    标签: javascript


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      这与您必须担心的key 无关。它是对象本身。

      Object.prototype[1] = 1;
      
      var somelist = {}
      
      for (var key in somelist) {
          alert(key);
      }
      
      // '1' was alerted
      

      【讨论】:

      • 谢谢。让我回顾一下你输入的内容,然后用我的大脑思考一下。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多