Why can we delete some built-in properties of global object?
<p>I'm reading es5 these days and find that [[configurable]] attribute in some built-in properties of global object is set to true which means we can delete these properties.</p>

<p>For example:</p>

<p>the join method of Array.prototype object have attributes </p>

<pre><code>{[[Writable]]:true, [[Enumerable]]: false, [[Configurable]]: true}
</code></pre>

<p>So we can easily delete the join method for Array like:</p>

<pre><code>delete Array.prototype.join;
alert([1,2,3].join);
</code></pre>

<p>The alert will display <code>undefined</code> in my chromium 17,firefox 9 ,ie 10,even ie6;</p>

<p>In Chrome 15 &amp; safari 5.1.1 the [[configurable]] attribute is set to true and delete result is also true but the final result is still <code>function(){[native code]}</code>. Seems like this is a bug and chromium fix it.</p>

<p>I haven't notice that before. In my opinion, delete built-in functions in user's code is dangerous, and will bring out so many bugs when working with others.So why ECMAScript make this decision?</p>
