2010-10-22 4 views
2

Y a-t-il des pièges à coder comme ça? Notez que je crée un nouvel objet fonction avec quelques propriétés misc, puis je traite l'objet comme un tableau. De même, comment les valeurs du tableau sont-elles stockées dans l'objet? Est-ce que 0 et 1 sont traités comme des noms de propriété?JavaScript: Utiliser l'objet comme tableau

+0

Tant que vous ne disposez pas d'une longueur propriété ne confondra votre objet avec un tableau. – some

Répondre

8

Eh bien, oui, 0, et 1 seront juste deux noms de propriété.

Lorsque vous affectez une propriété avec la notation entre crochets, l'expression entre les parenthèses sera convertie en chaîne et cette chaîne sera utilisée comme nom de propriété.

En fait, même les indices pour tableaux réels ne sont que des propriétés:

var realArray = ['a']; 
realArray.hasOwnProperty('0'); // true 

La différence est que tableau réel objets sur chaque affectation de propriété correspondant à un indice valide[1], de suivre en interne la valeur de leur propriété length.

C'est l'une des raisons pour lesquelles les objets du tableau « sous-classement » est difficile, even with the new ECMAScript 5 extensions, ou au moment aussi avec le projet ECMAScript-Harmony Proxies23, ne peut pas être complètement fait, d'une manière stanard.

Cela peut être un problème, en fonction de la façon dont vous envisagez itérer les propriétés numériques.

Si vous énumérez les propriétés avec l'instruction for-in, les autres membres apparaîtront, pas seulement les propriétés numériques. [1] Un index de tableau valide est un nombre entier non signé de 32 bits compris entre 0 et (2^32) -1.

+0

Je suis un peu surpris. Cela signifie qu'il n'y a pas de véritables tableaux en Javascript. Seulement un objet avec quelques fonctions de type tableau boulonné. – mellowsoon

+0

@mellowsoon: C'est tout à fait vrai. Tous les objets JavaScript, y compris les tableaux, sont juste une collection de propriétés. – casablanca

+0

@mellowsoon, exactement, les tableaux sont simplement des objets qui ont une méthode interne ['\ [\ [DefineOwnProperty \] \]'] (http://ecma262-5.com/els5_html#Section_15.4.5.1) spéciale , (entre autres quelques caractéristiques particulières). Cette méthode interne est utilisée lorsque vous faites une assignation de propriété, et elle prend soin de suivre et de calculer la valeur de la propriété 'length'. – CMS

1

Je pense que vous pourriez avoir des problèmes si vous essayez de boucler cela avec une boucle for in; la boucle obtiendra également bar. Il y a des façons de contourner cela, il faut donc faire attention.

1

Si vous souhaitez étendre behavious Array s'il vous plaît utiliser: Array.prototype.yourfunc = function()....