Javascript中“new”关键字的限制
Restriction of "new" keyword in Javascript
我有这个JS代码:
var A = {};
A.new = function(n) { return new Array(n); }
它在所有浏览器中都能很好地工作,但是当我尝试使用混淆器对其进行混淆时,它会显示错误。
它是有效的JS代码吗?我查看了规格,但什么也没找到。我知道,浏览器有时会接受语法错误的代码,但我想编写语法正确的代码。
请注意,我没有做var new = ...
顺便说一句,这个呢?
var a = { "new" : 2 }; // ok?
a.new = 3; // ok?
a["new"] = 3; // ok?
.
编辑:谢谢大家的帮助!我给混淆器的作者写了一封电子邮件,他们修复了它!:)
是的,您的代码是有效的,但混淆器是错误的(或旧的)。 new
是一个保留字,这意味着它不是一个有效的标识符(例如,用作变量名)。然而,它仍然是一个在对象文本和点表示法属性访问中有效的IdentifierName
。
EcmaScript 3 中,这两个都需要Identifier
,而像 new
这样的关键字是无效的。因此,在 Web 上的脚本中使用这些未引用的名称被认为是不好的做法,这些脚本可能由较旧的浏览器执行。
保留字可以用作属性标识符:
A.new = 1
B = { function: 123 }
D.if = { else: 5 }
等等 - 这些都是有效的(不一定是好的)JavaScript。
这些东西在规范中被称为"标识符名称","标识符名称"和常规标识符之间的唯一区别是
Identifier :: IdentifierName but not ReservedWord
http://es5.github.io/#x7.6
我没有看到任何错误。以点开头,它只是一个属性名称,就像 ['new'] 一样,不再是保留词。
由于 new
是保留字,因此不能用作标识符,尽管它可以用作标识符名称。请参阅 ECMAScript 规范的这一部分。所以你的代码是合法的,显然混淆器不理解这种区别。
要解决此问题,您可以使用数组样式表示法访问它:
A['new'] = function(n) { return new Array(n); };
相关文章:
- 如何在不使用 new 关键字的情况下从函数创建对象
- “new”关键字是在构造对象时自动设置“constructor”属性的唯一方法吗
- 使用“new”关键字创建的对象和使用“Object.create”创建的对象给出不同的结果
- JavaScript:古代代码使用“new”关键字启动简单对象.为什么
- 将 JavaScript new 关键字与可变长度参数数组一起使用
- 如何判断对象是使用“Object.create”还是使用文字语法/“new”关键字创建的
- Javascript [this] 关键字绑定与 new
- 在 anthor object 中使用 Object 方法,而无需在 javascript 中使用 new 关键字
- 使用“new”关键字的Javascript函数表达式视为“静态”是否正确?
- 在javascript中使用“new”关键字的替代方案是什么?
- JavaScript 'new' 关键字,带或不带 '()'
- Javascript Module Pattern 和 new 关键字
- Javascript中“new”关键字的限制
- javascript初始化一个没有new关键字的对象
- 闭包可以使用new关键字和区别,例如,在创建新对象/类时
- 函数中的Javascript“new”关键字
- JavaScript原型继承和“new”关键字
- 向使用javascript中的new function关键字创建的函数传递参数
- 在Javascript中使用instanceof自定义对象而不使用new关键字
- 如何给一个对象's与javascript中的new关键字的属性和方法