为什么 JavaScript 字典键不能使用 myDict.123 语法以数字开头?

Why can't JavaScript dictionary keys start with a number using the myDict.123 syntax?

前言

这个问题的答案很可能是 "because the creators of JavaScript decided so." 大多数情况下,除了与其他 identifiers/variable 名称和其他语言的一致性之外,我只是想知道这个决定背后是否有特定的原因。

问题

这是合法的:

var foo = { "1abc": "bar", 1: "lol" };
document.write(foo["1abc"]);
document.write(foo[1]);

第 2-3 行不合法:

var foo = { "1abc": "bar", 1: "lol" };
document.write(foo.1abc);
document.write(foo.1);

我没有使用过标识符可以以数字开头的语言,但是直到 JavaScript,我也没有使用过可以使用 dict[index] 和 [=] 引用字典值的语言16=]语法。

我不确定字典键是否被视为标识符。如果是,那么这个问题就很简单了。

然后,我不太清楚为什么 JavaScript 标识符不能以数字开头,因为数字是数字类型。在其他语言(例如 C#)中,数字具有 intlongdouble 等类型,导致 5L5D 指定“5 as long”和分别为“5双”。因此,理论上,JavaScript 标识符 可以 以数字开头,并且没问题(我认为)。

C#:

var x = 5L; // x is long type
var y = 5D; // x is double type

JavaScript:

var x = 5L; // syntax error
var y = 5D; // syntax error

所以,我的猜测是 JavaScript 标识符不能以数字开头以与其他语言保持一致,并且 JavaScript 字典键不能用 dict.123 语法引用为了与其他 JavaScript 标识符保持一致。这是唯一的原因吗?

我想你回答了你自己的问题。 "because the creators of JavaScript decided so."

来自 msdn:https://msdn.microsoft.com/en-us/library/ie/67defydd%28v=vs.94%29.aspx

最后,您要处理的是对象字面量,而不是字典。 Javascript 有两种方法可以针对不同的场合检索成员属性。 “。”语法用于静态访问,“[]”用于动态访问。考虑以下因素:

var myObj = {
  x:"foo",
  getX: function() {return this.x;}
};

var get = "get";
var X = "X";
alert(myObj[get+X]());  //Alerts "foo";

Javascript 让您可以做一些非常动态的事情,这通常会导致代码难以维护,但它仍然很酷。