保留字行为

时间:2013-11-19 04:18:21

标签: javascript arrays

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:6)

您正在修改无法设置为数组的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'

VS

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

答案 1 :(得分:2)

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


我相信这可以追溯到旧的Navigator状态栏日期(记住那些自动收报机状态栏)。状态只能输出为字符串---数组,当设置为字符串时,将被展平并以逗号分隔(例如var ar=['foo','bar']; alert(ar);

答案 2 :(得分:0)

当你这样做时

status = [...];

您实际上是在编写或更好地说明,修改窗口对象上的状态变量。

window.status = [...];

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

<强>更新

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

我建议更改变量的名称,或将其封装。

答案 3 :(得分:-1)

您已将'status'变量重新指定为以'd'开头的字符串(即白天,黄昏或黎明)。

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

字符串被视为字符数组,因此您可以使用括号访问各个字符。