Comportement réservé Word

En créant un petit jeu basé sur un compteur, j'avais un tableau comme ceci:

var status = ["day","dusk","night","dawn"]; 

Si j'ai essayé d'accéder au premier index du tableau, j'obtiendrais:

 console.log(status[0]); //yields "d" 

@monners a mentionné qu'il pourrait s'agir d'un mot réservé, j'ai donc changé le nom de la variable en xstatus et ça a bien fonctionné.

Ma question est la suivante: pourquoi le status[0] ne renverra-t-il que la première lettre du premier index?

Vous modifiez window.status qui ne peut pas être configuré sur un tableau:

https://developer.mozilla.org/en-US/docs/Web/API/Window.status


Il existe un comportement inexpliqué dans Firefox. Alors que le status et l' status var status à la portée globale fournissent des références à la propriété window.status , l' var status ne calcule pas le tableau:

 status = ["meagar"]; console.log(window.status[0]); // 'm' 

contre

 var status = ["meagar"]; console.log(window.status[0]); // 'meagar' 

Parce qu'il sauvegardera votre tableau en tant que chaîne plate et d est le premier caractère (position 0 ) de la chaîne.


Je crois que cela revient dans les anciens jours de la barre de statut Navigator (rappelez-vous les barres d'état du ticker). Le statut ne peut être envoyé que sous forme de chaîne — les tableaux, lorsqu'ils sont définis sur une chaîne, sont aplaties et délimitées par des virgules (p. Ex. var ar=['foo','bar']; alert(ar); )

Lorsque vous faites

status = [...];

Vous écrivez essentiellement ou mieux indiqué, en modifiant la variable d'état sur l'objet de fenêtre.

window.status = [...];

Si l' status est défini comme une nouvelle variable: var status = [...] cela résoudra le problème. Je sais que vous avez le statut var dans votre exemple ci-dessus, mais sans lui, la seule façon de penser que cela pourrait causer le problème.

Mettre à jour

Comme le dit Felix Kling, la variable, définie dans une portée globale et non encapsulée, sera confrontée à ce problème car il s'agit d'une variable membre sur l'objet fenêtre.

Je suggérerais de changer le nom de la variable, ou de l'encapsuler.

Vous avez réaffecté la variable 'status' à une chaîne qui commence par 'd' (c.-à-d. Jour, crépuscule ou aube).

 var status = 'day'; console.log(status[0]) // d console.log(status[1]) // a // etc... 

Les chaînes sont traitées comme des tableaux de caractères afin d'accéder aux caractères individuels avec les parenthèses.