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.