for..in...时,注意hasOwnProperty验证

for..in...时,注意hasOwnProperty验证

var obj = {

                a: 10,

                b: 20

            };

            

            // 注意词句代码

            Object.prototype.c = 30;

 

            var item;

            for (item in obj) {

                console.log(item);

     console.log(obj[item]);

            }

 

输出: a b c

输出:10 20 30

 

以上代码中,注意中间标注释的句子。这句代码加与不加,会对下面的for..in..循环产生影响。加上了就输出“c”,不加就不输出“c”。道理很简单,for..in..循环不光能遍历obj对象本身就有的属性,还能遍历obj原型中的属性。

要想屏蔽掉原型中的属性,就用hasOwnProperty函数,如下:

for (item in obj) {

    if (obj.hasOwnProperty(item)) {

        //if (Object.prototype.hasOwnProperty.call(obj, item)) {

            console.log(item);

           }

      }

 

这两句if判断语句,都可以用,效果是一样的。第一个代码可读性好,第二个效率相对较高。建议,没有特殊情况,用第一个即可。

posted @ 2017-02-23 11:09  lanyan  阅读(964)  评论(0编辑  收藏  举报