当我为…做时,我可以省去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.