Node.js中的for..in需要.hasOwnProperty()吗?

当我为…做时,我可以省去if(obj.hasOwnProperty(key)){…}检查Node.js,如果我小心,永远不要自己修改Object.prototype?

或者,如果我需要()某些第三方软件包碰巧修改Object.prototype,那么这也会搞砸我模块的Object.prototype吗?

最佳答案

Can I dispense with the if (obj.hasOwnProperty(key)) {…} check in Node.js if I am careful never to modify Object.prototype myself?

不,因为Object是全局的.任何人在你使用的任何模块(或者他们通过代理使用的任何模块)中与它混淆,并且无论你做什么,他们都会为你的代码打破它.财产检查是损害控制.这是对某人捣乱的性质的检查,你暗中继承.

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是for … in循环所必需的,但循环本身可能不是必需的,并且在大多数情况下更好地避免. air-bnb eslint style guide for instance bans looping over an object all together.

点赞