"Geler" les Tableaux en Javascript?

Depuis l'ECMA-262 spécifications Javascript a gagné le Objet.freeze() méthode, qui permet d'objets, dont les propriétés ne peuvent pas être modifiés, ajoutés ou supprimés.

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.

Je me demande, si le gel() devrait également travailler sur les Tableaux.

var arr = [1, 2];
Object.freeze(arr);
Object.isFrozen(arr);      //returns true
arr[0] = 10;
arr;                       //returns [10, 2] ... ouch!

Peut-être que je me trompe, mais j'étais sous l'impression, que le Tableau hérite de l'Objet.

typeof obj                 //"object"
typeof arr                 //"object"

Les idées, les pointeurs, enlightenments serait très appréciée.

  • Je m'attends à geler le tableau aussi. Quel navigateur(s) pièce(s) dit comportement?
  • Ne fonctionne pas dans FF6: var a = []; Object.freeze(a); a.push('foo'); // TypeError: a.push("foo") is not extensible
  • On dirait que c'est un bug de mise en œuvre. Geler les tableaux " fonctionne dans Firefox (6.0.2), Chrome (14.0.835.186) - mais pas sur la version précédente. Il ne fonctionne pas sur Safari (5.1).
  • il ne fonctionnera pas sur les navigateurs qui ont été créés avant le nouveau standard de déploiement.
  • C'est pourquoi il est drôle, qu'il ne fonctionne pas dans Safari 5.1 (date de sortie: 20 juillet 2011), et ni dans le dernier Webkit tous les soirs ( Version 5.1 (6534.50, r95673) ). Je suis seulement curieux de savoir pourquoi google Chrome, qui est aussi construire sur de Webkit n'en souffrent pas... Peut-être parce que le moteur Javascript V8?
InformationsquelleAutor trembl | 2011-09-22