使用关键字作为对象键会在Aptana中引发语法错误

时间:2013-05-29 09:01:05

标签: javascript aptana

在尝试使用分配给'with'的对象时,我遇到了Aptana studio的问题:

var x = {};
x.with = 12;

这会产生语法错误:意外令牌'带'

代码位于我正在使用的外部库中,因此我不想更改代码,这不会导致IE或Chrome中的错误。

我尝试过使用偏好设置> Javascript语法验证器并添加规则,但我在编写正确的表达式时遇到问题。有没有人知道如何在不忽略真正错位的其他“有”事件的情况下关闭此错误?

我们非常感谢任何建议。

1 个答案:

答案 0 :(得分:4)

  

这会产生语法错误:意外令牌'带'

那是因为 语法错误很长一段时间:这是ES3规范(1999)的语法错误,可能在此之前;从ES5开始(~2009;没有ES4),它不再是语法错误,但是一些仍在广泛使用的引擎早于该规范并且尚未(并且可能不会)更新(例如,IE8)

with是一个关键字。该表达式(x.with)是属性访问者,特别是使用文字属性名称的访问者。 ES3的定义要求名称为标识符标识符是一个术语,规范给出了一个特定的定义:基本上它是遵循某些命名规则的名称一个保留字。因此with不能用作标识符。要访问名称为保留字的属性,必须使用带括号的括号表示法:

x["with"] = 12;

从ES5开始,放宽了文字属性名称(§11.2.1)的规则。 (非常感谢Felix Kling指出这一点!)现在,他们只需要 IdentifierName ,而不是 Identifier 。区别? IdentifierName 符合命名规则; 标识符标识符名称,它不是保留字。这包含在§7.6

这不是我依赖JavaScript实施者和工具构建器等的东西,如果我正在编写一个库,那么普遍正确。

我认为你唯一的办法是用Aptana打开一个bug报告,现在,按照下面的描述修改库。不理想。


更多关于我之前提到过的[]符号:

x["with"] = 12;

在JavaScript中,您可以使用点分表示法和文字属性名称(x.foo),或使用括号表示法和字符串属性名称(x["foo"])来访问属性。使用文字时,上述规则适用。但是,当使用字符串时,您可以执行任何您想要的操作(包括空格和 IdentifierNames 中不允许的其他字符)。

它也适用于对象初始化器:

var x = {
    "with": 12
};

如果我正在编写一个库,或者需要在野外运行的任何代码,那就是我使用的。有一天我们将能够假设ES5兼容性,但那一天还没有到来。