当我在创建一个基于计数器的小游戏时,我有一个类似这样的数组:
var status = ["day","dusk","night","dawn"];
如果我试图访问数组的第一个索引,会得到以下结果:
console.log(status[0]); //yields "d"
@monners提到可能是一个保留字,所以我把变量名改成了xstatus
,然后它就正常工作了。
我的问题是:为什么status[0]
只返回第一个索引的第一个字母?
当我在创建一个基于计数器的小游戏时,我有一个类似这样的数组:
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
status
和var status
都提供对window.status
属性的引用,但var status
不会展开该数组:status = ["meagar"];
console.log(window.status[0]); // 'm'
vs
var status = ["meagar"];
console.log(window.status[0]); // 'meagar'
var
只会创建一个本地变量。在全局作用域下使用 var status
只是给你一个对 window
的现有属性的引用。 - user229044var status = status
和 status = [...]
从来不一样,但是 var status = x
和 status = x
在全局作用域下都等同于 window.status = x
。 - user229044status
和var status
的处理是不同的:http://jsfiddle.net/PQN2P/。至少我在第一种情况下得到了`d`,而在第二种情况下得到了`day`。 - Felix Klingwindow.status
的引用。是的,在Firefox中,它似乎接受一个数组,但只有在使用var status
时才行。非常奇怪。 - user229044d
是字符串的第一个字符(位置为0
)。
var ar=['foo','bar']; alert(ar);
)。var ar=['foo','bar']; alert(ar)
)。 - vol7ron当你执行
status = [...];
实际上你是在写入或更好地说,修改窗口对象上的状态变量。
window.status = [...];
如果status
被设置为一个新变量:var status = [...]
,那么这个问题就会得到解决。我知道你在上面的例子中有var
status,但是如果没有它,我想到的唯一可能引起问题的方式就是这样。
更新
正如Felix Kling所述,由于变量在全局范围内定义而不是封装的,因此将面临这个问题,因为它是窗口对象上的成员变量。
我建议更改变量的名称或对其进行封装。
var
与否都没有关系。 - Felix Klingvar status
。如果他在全局范围内这样做,这将无法解决他的问题。 - user229044您已将“status”变量重新分配为以“d”开头的字符串(即day、dusk或dawn)。
var status = 'day';
console.log(status[0]) // d
console.log(status[1]) // a
// etc...
字符串被视为字符数组,因此您可以使用方括号访问单个字符。
window.status
是一个特殊的变量。它曾用于设置网站状态文本,但现在浏览器几乎不再显示该文本。这意味着该变量的值只能是字符串,因此你给它分配的任何值都会被隐式转换为字符串。 - Felix Kling