JavaScript语句中,for-in为什么不被大家推荐,原因只有一个

点击右上方红色按钮关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!

从定义出发,for-in语句可以用来遍历对象的所有属性的名字。举个例子:

JavaScript语句中,for-in为什么不被大家推荐,原因只有一个

用字面量的方式定义了一个对象obj1。接着用for-in语句将它的所有属性打印出来。

JavaScript语句中,for-in为什么不被大家推荐,原因只有一个

这样,没有问题。

一,副作用

糟糕的是,它也会遍历出所有从原型链中继承而来的成员属性。这带来了糟糕的副作用:或许你只对数据成员感兴趣,但它却提供了一些方法函数。看下面一段代码:

JavaScript语句中,for-in为什么不被大家推荐,原因只有一个

如上所示, 我将obj1赋给了构造函数changeName的原型,其中这个构造函数有一个属性age='90'。然后,我来遍历构造函数changeName的实例。

JavaScript语句中,for-in为什么不被大家推荐,原因只有一个

记得先实例化构造函数,在遍历。

JavaScript语句中,for-in为什么不被大家推荐,原因只有一个

很显然, 将原型obj1中的所有属性都遍历出来了。这或许不是我们想要的结果。所以我们得想办法处理一下。

二,加个判断

处理方法就是, 在每个for-in语句的主体都加一个用于过滤的if语句。if语句可以选择某种特定的类型或某个范围内的值,它可以排除函数,或者排除从原型继承而来的属性。如下代码:

JavaScript语句中,for-in为什么不被大家推荐,原因只有一个

if中使用hasOwnProperty方法用来判断某个对象是否含有指定的属性。这个方法和其它方法不同,该方法会忽略掉那些从原型链上继承到的属性。

输出结果:

JavaScript语句中,for-in为什么不被大家推荐,原因只有一个

或许这就是我们想要的结果。

总结一下:

JavaScript语句中, forin为什么不被大家推荐,因为它将原型上的属性方法也遍历出来了,这会引起糟糕的副作用。


分享到:


相關文章: