68 votes

Noms de propriété d'objet javascript valides

Je suis en train de travailler sur ce qui est considéré comme valide pour le nom de la propriété d'un objet javascript. Par exemple

var b = {}
b['-^colour'] = "blue";     // Works fine in Firefox, Chrome, Safari
b['colour'] = "green";      // Ditto
alert(b['-^colour']);       // Ditto
alert(b.colour);            // Ditto
for(prop in b) alert(prop); // Ditto
//alert(b.-^colour);     // Fails (expected)

Ce post détails javascript valide les noms de variables et de '-^la couleur est clairement pas valable (comme un nom de variable). Le même s'applique à l'objet de la propriété des noms? La je suis en train de travailler si

  1. b['-^couleur'] n'est pas valide, mais fonctionne dans tous les navigateurs, par caprice, et je ne devrais pas faire confiance à l'avenir

  2. b['-^couleur'] est tout à fait valable, mais c'est juste une forme qui ne peut être accessible de cette manière - (il est pris en charge pour les Objets peuvent être utilisés comme des cartes peut-être?)

  3. Quelque chose d'autre

En aparté, une variable globale en javascript pourrait être déclaré au plus haut niveau comme

var abc = 0;

mais il pourrait aussi être créé (comme je le comprends) avec

window['abc'] = 0;

les œuvres suivantes dans tous les navigateurs

window['@£$%'] = "bling!";
alert(window['@£$%']);

Est-ce valable? Il semble contredire la variable règles de nommage - ou je ne suis pas la déclaration d'une variable y? Quelle est la différence entre une variable et un nom de propriété d'objet?

61voto

Matthew Flaschen Points 131723

Oui, les objets peuvent être utilisées comme des cartes, et toute chaîne de caractères peut être un nom de propriété. Comme vous l'avez découvert, certaines propriétés peuvent uniquement être consulté en utilisant le support de la syntaxe.

window['abc']

est l'accès à une propriété. Ce n'est pas une variable, même si elle se réfère à la même valeur (au niveau mondial) comme:

abc

14voto

Matti Virkkunen Points 31633

Propriété de l'objet de règles de nommage et de variable règles de nommage sont séparés. La norme uniquement les "réserves" une poignée de noms de propriété (comme prototype et constructor, IIRC), mais d'autres que ceux qui, n'importe quelle chaîne va.

Sauf lorsque l'environnement d'exécution (c'est à dire le navigateur), décide d'ajouter plus de magie propriétés, bien sûr. (J'entends paramètre __proto__ sauts de certaines choses assez étranges façons)

8voto

David de Rosier Points 629
  1. Chaque fois que vous créez une variable globale que vous créez en fait un nouveau membre d'un objet global (qui est - window dans le navigateur de l'environnement, global dans Node.js, etc.). C'est pourquoi, window.x est exactement la même, comme (global) var x, this.x ou juste x.

  2. La compréhension de JavaScript objet comme une carte est tout à fait juste, parce que: a) vous pouvez ajouter un nouvel élément dynamique à tout moment; b) l'élément peut avoir n'importe quel nom - aussi, y compris les caractères spéciaux, c) vous pouvez essayer d'accéder à un non-existant élément d'un objet/de la carte et il n'est pas une erreur, d) vous pouvez supprimer un élément d'un objet.

  3. Si vous souhaitez y accéder les membres de l'objet à la norme dot notation (par exemple. a.x) vous n'êtes pas autorisé à utiliser de caractères spéciaux différent _ ou $; aussi le nom ne peut pas démarrer à partir d'un nombre. Pour tous les autres cas, vous êtes obligé d'utiliser les crochets et les guillemets pour objet d'accès aux éléments.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X