mozilla

Compare Revisions

Object.defineProperty()

Change Revisions

Revision 450347:

Revision 450347 by Waldo on

Revision 464167:

Revision 464167 by Waldo on

Title:
Object.defineProperty
Object.defineProperty
Slug:
Web/JavaScript/Reference/Global_Objects/Object/defineProperty
Web/JavaScript/Reference/Global_Objects/Object/defineProperty
Tags:
"ECMAScript5", "JavaScript 1.8.5", "writable", "Object", "enumerable", "configurable", "JavaScript", "Object Methods"
"ECMAScript5", "JavaScript 1.8.5", "writable", "Object", "enumerable", "configurable", "JavaScript", "Object Methods"
Content:

Revision 450347
Revision 464167
t328      It is possible to redefine the <code>length</code> propertyt328      It is possible to redefine the <code>length</code> property
> of arrays, but not all browsers permit this redefinition. &nbsp;> of arrays, subject to the usual redefinition restrictions.&nbsp;
>Firefox 4 through 22 will throw a <code>TypeError</code> on any a> (The <code>length</code> property is initially non-configurable,
>ttempt to redefine the length property of an array. &nbsp;Version> non-enumerable, and writable.&nbsp; Thus on an unaltered array i
>s of Chrome which implement <code>Object.defineProperty()</code> >t is possible to change the <code>length</code> property's value,
>in some circumstances ignore a length value different from the ar> or to make it non-writable.&nbsp; It is not allowed to change it
>ray's current <code>length</code> property, changing writability >s enumerability or configurability, or if it is non-writable to c
>seems to silently not work in some circumstances, and some method>hange its value or writability.)&nbsp; However, not all browsers 
>s like <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objec>permit this redefinition.
>ts/Array/push" title="/en-US/docs/Web/JavaScript/Reference/Global 
>_Objects/Array/push"><code>Array.prototype.push</code></a> don't  
>respect non-writable length. &nbsp;Versions of Safari which imple 
>ment <code>Object.defineProperty()</code> ignore a length value d 
>ifferent from the array's current <code>length</code> property, a 
>nd attempts to change writability execute without error but do no 
>t actually change the property's writability. &nbsp;Only Internet 
> Explorer 9 and later, and Firefox 23 and later, appear to fully  
>and correctly implement redefinition of the <code>length</code> p 
>roperty of arrays. &nbsp;For now, don't rely on redefining the <c 
>ode>length</code> property of an array to either work, or to work 
> in a particular manner.&nbsp; And even when you <em>can</em> rel 
>y on it, <a href="http://whereswalden.com/2013/08/05/new-in-firef 
>ox-23-the-length-property-of-an-array-can-be-made-non-writable-bu 
>t-you-shouldnt-do-it/" title="http://whereswalden.com/2013/08/05/ 
>new-in-firefox-23-the-length-property-of-an-array-can-be-made-non 
>-writable-but-you-shouldnt-do-it/">there's really no good reason  
>to do so</a>. 
329    </p>
330    <p>
331      Firefox 4 through 22 will throw a <code>TypeError</code> on
 > any attempt whatsoever (whether permitted or not) to redefine th
 >e length property of an array.
332    </p>
333    <p>
334      Versions of Chrome which implement <code>Object.definePrope
 >rty()</code> in some circumstances ignore a length value differen
 >t from the array's current <code>length</code> property.&nbsp; In
 > some circumstances changing writability seems to silently not wo
 >rk (and not throw an exception).&nbsp; Also, relatedly, some arra
 >y-mutating methods like <a href="/en-US/docs/Web/JavaScript/Refer
 >ence/Global_Objects/Array/push" title="/en-US/docs/Web/JavaScript
 >/Reference/Global_Objects/Array/push"><code>Array.prototype.push<
 >/code></a> don't respect a non-writable length.
335    </p>
336    <p>
337      Versions of Safari which implement <code>Object.definePrope
 >rty()</code> ignore a length value different from the array's cur
 >rent <code>length</code> property, and attempts to change writabi
 >lity execute without error but do not actually change the propert
 >y's writability.
338    </p>
339    <p>
340      Only Internet Explorer 9 and later, and Firefox 23 and late
 >r, appear to fully and correctly implement redefinition of the <c
 >ode>length</code> property of arrays. &nbsp;For now, don't rely o
 >n redefining the <code>length</code> property of an array to eith
 >er work, or to work in a particular manner.&nbsp; And even when y
 >ou <em>can</em> rely on it, <a href="http://whereswalden.com/2013
 >/08/05/new-in-firefox-23-the-length-property-of-an-array-can-be-m
 >ade-non-writable-but-you-shouldnt-do-it/" title="http://whereswal
 >den.com/2013/08/05/new-in-firefox-23-the-length-property-of-an-ar
 >ray-can-be-made-non-writable-but-you-shouldnt-do-it/">there's rea
 >lly no good reason to do so</a>.

Back to History