保留字行为
Reserved Word Behavior
在创建一个基于计数器的小型游戏时,我有一个这样的数组:
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中存在一些无法解释的行为。虽然全局范围内的status
和var 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...
字符串被视为字符数组,因此您访问的是带有括号的单个字符。
- 调试器;[错误]194:11:标识符是一个保留字
- 复杂Regex:如何穿't匹配//之后的保留字
- 在nodejs'inspect'表现得像个保留字
- 使用特征检测通过点表示法检查对保留字的支持
- 为什么“;闭合的“;保留字是JS
- 保留字行为
- 命名函数“;删除“..删除是一个保留字
- 自定义 eslint 规则抛出意外的保留字
- 在带有猫鼬的 JSLint 中抑制“预期标识符,而是看到”默认“(保留字)”
- 是否可以在JS中获取保留字(变量,函数,对象名称)的列表
- “parent”不应该用作javascript变量名(保留字)
- 如何在 dialog() 模式弹出窗口中的部分视图之间保留字段数据
- 为什么我的 JavaScript 哈希带有保留字“toString”作为显示 NaN 的键
- JavaScript 中的保留字列表
- self 在 JavaScript 中不是一个保留字 - 所以它是如何在没有在我的脚本中定义的的情况下使用它的
- 值为“错误”的字符串是某种保留字
- 意外使用保留字'让'在严格模式下
- JavaScript 模块 - 语法错误:export.runInThisContext 中的意外保留字
- 当代码包含保留字时,设置代码的CSS
- 电子,反应,webpack”;未捕获的语法错误:意外的保留字"