Since the ECMA-262 specifications Javascript has gained the Object.freeze() method, which allows for objects, whose properties can not be changed, added or removed.
var obj = {'a':1, 'b:2'};
Object.freeze(obj);
Object.isFrozen(obj); // returns true
obj.a = 10; // new assignment has no affect
obj.a; // returns 1
So far so good.
I am wondering, whether freeze() should also work on Arrays.
var arr = [1, 2];
Object.freeze(arr);
Object.isFrozen(arr); // returns true
arr[0] = 10;
arr; // returns [10, 2] ... ouch!
Maybe I am wrong, but I was under the impression, that Array inherits from Object.
typeof obj // "object"
typeof arr // "object"
Any ideas, pointers, enlightenments would be highly appreciated.
var a = []; Object.freeze(a); a.push('foo'); // TypeError: a.push("foo") is not extensible
– Dianndianna[1, 2]
and NOT[10, 2]
. Looks like the array accessor doesn't throw an error, but it works. – Indemnity