我正在尝试使用Google Closure Compiler缩小第三方JavaScript库,但它在下面的行中出错:
inBlock.package = package = name
错误是
上面的错误 - 解析错误。之后缺少名字。操作者**
name
是函数内的局部变量,inBlock
是输入参数。函数中没有任何地方声明package
以外的错误行。
我想可能是因为package
是JavaScript中的保留关键字?
知道JavaScript中的包是什么以及如何解决它?
答案 0 :(得分:14)
你是对的,package
是JavaScript中的保留字(但仅限于严格模式,这将是代码在某些地方工作的原因)。
package
是未来保留的,这意味着它不用于任何东西,但你不能用它来命名变量。但是(如果你真的必须),你可以使用它来命名对象中的键,如下所示:
inBlock['package'] = name; // this is ok
只要你使用一个字符串。你不能这样做:
inBlock.package = name; // this is not ok
我会说你最好把它命名为其他东西。
答案 1 :(得分:2)
根据MDN,package
属于“为未来保留”类别。根据您使用的浏览器的版本以及您的代码是否处于严格模式,您可能会也可能无法将这些单词用作标识符。换句话说,你应该避免它们是安全的。
如果使用以下语法, 可以安全地使用保留字作为属性名称:
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']