芒果小站

  1. 全球最具业界良心的主机 - Linode

    毫无疑问,目前做得最好的主机供应商

    猛击这里查看

  2. 芒果小站目前使用的主机 - Linode

    客服响应快,随时退款,XEN 架构稳定

    猛击这里查看

  3. 最好的日本东京线路主机 - Linode

    可选弗里蒙特、达拉斯、亚特兰大、纽瓦克、伦敦、东京机房

    猛击这里查看

  • 1
  • 2
  • 3
切换到精简模式
7

JavaScript for…in 循环的陷阱

作者 芒果/分类 代码/发布于 2011-03-18 13:18

For…In 声明用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。

先定义一个构造函数:

var Status = function(arg){
    this.arg = arg;
}
Status.prototype.getStatus = function(){
    return this.arg;
}

接着实例化:

var instance = new Status('a test string');
instance.getStatus();
instance.ooxx = 'ooxx';

用 for…in 遍历属性:

for(i in instance){
    console.log(i);
}

看下运行结果:

arg
ooxx
getStatus

可见原型方法也被遍历出来的,但事实上往往并不想要。于是需要这么干:

for(i in object){
    if(object.hasOwenProperty(i)){
        //...
    }
}

这样就能把函数和原型属性方法过滤掉鸟~
参考:《JavaScript 语言精粹》第 120 页,饺子哥威武

版权所有,转载请注明出处。
转载自 <a href="http://mangguo.org/javascript-for-in-loop-trap/" title="JavaScript for…in 循环的陷阱" rel="bookmark">JavaScript for…in 循环的陷阱 | 芒果小站</a>
如果喜欢这篇文章,欢迎订阅芒果小站以获得最新内容。

已经有 7 条群众意见

  1. 万戈 /2011-03-18 13:32

    一眼瞄到那个OOXX,哈哈 回应

    #1
  2. 芒果万戈/2011-03-18 14:41

    你的内心是有多么邪恶啊~ 回应

    #2
  3. mou /2011-03-19 19:31

    将WP的模板改得倒是不错。
    http://x.co/Nexl 回应

    #3
  4. 大尚网 /2011-03-21 00:00

    javascript还得要学习,看不懂,呵呵,惭愧呀 回应

    #4
  5. 图图 /2011-06-03 10:14

    博主是做程序的吗,感觉好专业啊 回应

    #5
  6. CC霜 /2011-10-18 17:13

    js遍历数组和遍历对象,下表的值是不同的,如果是数组就是数字,如果是对象就是value的key 回应

    #6
  7. dabing /2013-11-11 23:06

    其实for..in语句的最大陷阱,在于使用getElementsByTagName()是,会获取lenth、item、namedItem,这样就会出现很多意外错误 回应

    #7

下面我简单说几句