是.hasOwnProperty()在Node.js for..in所必需的?

当我做for..in ,我可以免除if (obj.hasOwnProperty(key)) {...}检查Node.js如果我小心永远不要修改Object.prototype自己?

或者,如果我require()一些第三方包发生修改Object.prototype ,这是否搞砸了我的模块Object.prototype呢?

我可以免除在Node.js if(obj.hasOwnProperty(key)){…}检查,如果我小心永远不要自己修改Object.prototype?

不,因为Object是全局的。 任何在你使用的任何模块(或者代理使用的任何模块)中使用它的人,无论你做了什么,他们都会为你的代码破坏它。 财产检查是损害控制。 这是一个检查与你隐瞒inheritance的人的性质。

node_modules / breakit.js

 Object.prototype.foobar = () => "borked"; module.exports = true; 

运行节点..

 > require('breakit'); true > let a = {}; > for ( let k in a ) { console.log(k) } foobar > a.foobar(); borked 

.hasOwnProperty循环需要.hasOwnProperty时,循环本身可能不是必须的,而且在大多数情况下可以避免这种情况。 例如, air-bnb eslint风格指南禁止在一个对象上一起循环 。

节点中没有任何具体的东西可以保证不检查。 如果你已经在使用lodash,你可以使用_.forOwn() https://lodash.com/docs#forOwn

另一个select是:

 Object.getOwnPropertyNames(yourObj) .forEach(function(keyName) { yourObj[keyName] // do stuff }); 

或继续进行“如果”检查,有几个选项,但我肯定会保持其中一个检查,您的select哪个。

Interesting Posts