我最近正在阅读es5,发现在全局对象的某些内置属性中的[[configurable]]属性设置为true,这意味着我们可以删除这些属性。
例如:
Array.prototype对象的join方法具有属性
{[[Writable]]:true, [[Enumerable]]: false, [[Configurable]]: true}
因此,我们可以轻松删除Array的join方法,例如:
delete Array.prototype.join;
alert([1,2,3].join);
警报将显示 undefined
在我的铬17,Firefox 9(即10,甚至ie6)中;
在Chrome 15和safari 5.1.1中,[[configurable]]属性设置为true,删除结果也为true,但最终结果仍为 function(){[native code]}
。似乎这是一个错误,而铬修复了它。
我以前没注意到。我认为删除用户代码中的内置函数很危险,并且在与其他人一起工作时会带来很多错误。那么为什么ECMAScript会做出这个决定?