动态添加名称以数字值引导的变量

sti*_*man 5 javascript

我注意到,如果我尝试使用带有数字值的键名创建一个对象,则会抛出一个错误(这与此处列出的JavaScript命名一致:哪些字符对JavaScript变量名有效?).但是,我注意到,如果我这样做,我仍然可以动态添加这样的变量名

失败:

object.1foo = "bar";
Run Code Online (Sandbox Code Playgroud)

失败:

object = {
  1foo: "bar"
}
Run Code Online (Sandbox Code Playgroud)

成功:

object["1foo"] = bar;
Run Code Online (Sandbox Code Playgroud)

这是为什么?

ale*_*lex 3

当你这样做时,object["1foo"]你实际上是在转义属性的名称,所以这就是它起作用的原因。

另一个也失败了,因为 1foo 没有转义,它的形式相同。

如果您想使用标准点符号(例如 object.property)访问对象成员,则不允许使用除 _ 或 $ 之外的任何特殊字符;除此之外,名称不能以数字开头。对于所有其他情况,您必须使用方括号和引号来访问对象元素。