gpt4 book ai didi

javaScript 保留关键字

转载 作者:数据小太阳 更新时间:2023-10-29 04:39:17 28 4
gpt4 key购买 nike

我想知道 JavaScript 的保留关键字/函数是如何管理的。

示例:

根据:

http://www.quackit.com/javascript/javascript_reserved_words.cfm

delete 是 JavaScript 的保留关键字。

然后在某些上下文中考虑以下代码段:

var cookieManager = {
get: function (name) {
// function contents ...
console.log("cookieManager.get() called");
return true;
},
set: function (name, value, days) {
// function contents ...
console.log("cookieManager.set() called");
return true;
},
delete: function (name) {
// function contents ...
console.log("cookieManager.delete() called");
return true;
}
};

这个对象有一个 delete 属性,但是它的名字被 JavaScript 保留了,所以它应该会失败,对吧?

然而,当我在 FireFoxwebconsole 中执行 cookieManager.delete(); 时,我得到以下输出,表明它工作正常:

[11:26:00.654] cookieManager.delete();
[11:26:00.656] cookieManager.delete() called
[11:26:00.657] true

但是,如果您在 JsLint 中运行代码,它会显示

Problem at line 12 character 5: Expected an identifier and instead saw 'delete' (a reserved word).

delete: function (name) {

暗示这是一个很大的不行不行的方法,应该避免。

那么我什么时候应该考虑保留关键字,因为在这个例子中它似乎像我想要的那样工作(删除关键字在对象 cookieManager 的上下文中,因此不会导致冲突,因此可以使用它) 还是我应该遵守 JsLint 的圣经并重命名任何由 javascript 保留的关键字?在这种情况下,我可以轻松地将 .delete() 重命名为 .remove()。

最佳答案

实际上,根据 ECMAScript specification 这是允许的.对象字面量的产生式规则 ( Section 11.1.5 ) 是:

ObjectLiteral :
{}
{PropertyNameAndValueList}
{PropertyNameAndValueList ,}

PropertyNameAndValueList :
PropertyAssignment
PropertyNameAndValueList , PropertyAssignment

PropertyAssignment :
PropertyName : AssignmentExpression
get PropertyName ( ){FunctionBody}
set PropertyName (PropertySetParameterList){FunctionBody}

PropertyName :
IdentifierName
StringLiteral
NumericLiteral

在您的情况下,您使用 IdentifierName 作为属性名称。 Section 7.6.1说:

A reserved word is an IdentifierName that cannot be used as an Identifier.

注意区别:您不能将保留关键字用作标识符,但由于它是有效的IdentifierName,您可以将其用作PropertyName .


然而,其他(版本)浏览器可能无法容忍这一点,所以为了安全起见,我会重命名它。

除了浏览器可能出现的问题外,它还可能使阅读您的代码但不熟悉此规则的其他人感到困惑。


FWIW,当然你总是可以使用保留关键字作为字符串:

var a = {'delete': 'foo'};
alert(a['delete']);

关于javaScript 保留关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6799559/

28 4 0