保留字行为

Reserved Word Behavior

本文关键字:保留字      更新时间:2023-09-26

在创建一个基于计数器的小型游戏时,我有一个这样的数组:

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

如果我试图访问数组的第一个索引,我会得到:

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

@monners提到它可能是一个保留字,所以我将变量名改为xstatus,效果很好。

我的问题是:为什么status[0]只返回第一个索引的第一个字母?

您正在修改不能设置为数组的window.status

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


Firefox中存在一些无法解释的行为。虽然全局范围内的statusvar status都提供了对window.status属性的引用,但var status不会使数组变平:

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

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

因为它将把数组保存为平面字符串,而d是字符串的第一个字符(位置0)。


我相信这可以追溯到以前的Navigator状态栏时代(记住那些股票行情栏)。状态只能以字符串的形式输出---数组设置为字符串时,将被展平并以逗号分隔(例如var ar=['foo','bar']; alert(ar);

进行时

status = [...];

您本质上是在编写或更好地表述,修改窗口对象上的状态变量。

window.status = [...];

如果将status设置为新变量:var status = [...],则这将解决问题。我知道你在上面的例子中有var状态,但没有它是我唯一能想到的会导致问题的方法。

更新

正如Felix Kling所说,变量是在全局范围内定义的,而不是封装的,由于它是窗口对象上的成员变量,因此将面临这个问题。

我建议更改变量的名称,或者封装它。

您已将"status"变量重新分配给以"d"开头的字符串(即day、黄昏或黎明)。

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

字符串被视为字符数组,因此您访问的是带有括号的单个字符。