javascript包,是一个保留关键字

时间:2011-12-20 00:15:09

标签: javascript package google-closure-compiler

我正在尝试使用Google Closure Compiler缩小第三方JavaScript库,但它在下面的行中出错:

inBlock.package = package = name

错误是

  

错误 - 解析错误。之后缺少名字。操作者**

上面的

name是函数内的局部变量,inBlock是输入参数。函数中没有任何地方声明package以外的错误行。

我想可能是因为package是JavaScript中的保留关键字? 知道JavaScript中的包是什么以及如何解决它?

4 个答案:

答案 0 :(得分:14)

你是对的,package是JavaScript中的保留字(但仅限于严格模式,这将是代码在某些地方工作的原因)。

package是未来保留的,这意味着它不用于任何东西,但你不能用它来命名变量。但是(如果你真的必须),你可以使用它来命名对象中的键,如下所示:

inBlock['package'] = name;  // this is ok

只要你使用一个字符串。你不能这样做:

inBlock.package = name;  // this is not ok

我会说你最好把它命名为其他东西。

答案 1 :(得分:2)

根据MDNpackage属于“为未来保留”类别。根据您使用的浏览器的版本以及您的代码是否处于严格模式,您可能会也可能无法将这些单词用作标识符。换句话说,你应该避免它们是安全的。

如果使用以下语法, 可以安全地使用保留字作为属性名称:

inBlock["package"] = something;

但这对您的package变量没有帮助。你可以重命名吗?

答案 2 :(得分:2)

“package”是ecmascript 3中的保留字.ecmascript 5减少了保留字集,使其可用于实现它的浏览器,并在ecmascript 5“严格”模式下再次引入(这将成为未来的基础) emcascript修订版。)

Ecmascript 5也改变了对保留字的限制,具体来说,您可以使用保留字作为属性名称(无论模式如何),但不能使用变量名。

因此,如果您将Closure Compiler置于EcmaScript 5模式,您可以使用“inBlock.package”并且它不会抱怨,但是如果您尝试在较旧的IE版本中使用它(8,7,6 I)相信)它将无法解析。大多数其他浏览器没有遵循规范的这一部分,也没有受到影响。

答案 3 :(得分:1)

package是一个关键字(来自Java),保留供以后在JavaScript中使用。解决方案?将变量命名为其他内容:)

如果您无法更改inBlock.package的名称,请使用括号表示法来访问它:

inBlock['package']