这会产生语法错误:意外标记“with”
那是因为长期以来它是一个语法错误:根据 ES3 规范(1999),这是一个语法错误,并且可能在此之前;从 ES5(约 2009 年;没有 ES4)开始,它不再是语法错误,但一些引擎仍然在该规范之前广泛使用,并且尚未(并且可能不会)更新(例如 IE8) .
with
是一个关键字。该表达式 ( x.with
) 是一个属性访问器,特别是一个使用文字属性名称的访问器。那些的 ES3 定义要求名称是Identifier,Identifier是规范给出的特定定义的术语:基本上它是遵循某些命名规则的名称,而不是保留字。所以with
不能用作Identifier。要访问名称为保留字的属性,您必须使用带括号的符号和字符串:
x["with"] = 12;
从 ES5 开始,文字属性名称(第 11.2.1 节)的规则被放宽了。(非常感谢 Felix Kling 指出这一点!)现在,它们只需要是IdentifierName,而不是Identifier。区别?IdentifierName是符合命名规则的东西;标识符是不是保留字的标识符名称。§7.6 对此进行了介绍。
哇,我不会依赖 JavaScript 实现者和工具构建者等,如果我正在编写一个库,那么这一切都是正确的。
我认为你唯一的办法是用 Aptana 打开一个错误报告,现在,如下所述修改库。不理想。
更多关于[]
我之前提到的符号:
x["with"] = 12;
在 JavaScript 中,您可以使用点分表示法和文字属性名称 ( x.foo
) 或使用括号表示法和字符串属性名称 ( x["foo"]
) 来访问属性。使用文字时,适用上述规则。但是,当使用string时,您几乎可以做任何您想做的事情(包括空格和IdentifierNames中不允许的其他字符)。
它也适用于对象初始化器:
var x = {
"with": 12
};
如果我正在编写一个库或任何需要在野外运行的代码,这就是我会使用的。总有一天我们可以假设 ES5 兼容,但那一天还没有到来。