JavaScript 语法高亮——status 是关键字吗?——它是用来做什么的?

Dan*_*son 6 javascript vim syntax-highlighting

我的 vim 语法高亮让我相信这status是 JavaScript 中的一个关键字。

搜索我能找到的所有关于window.status浏览器 JavaScript 的文章。这是这个“关键字”的含义status还是有什么不同的情况?

关键词是什么status

Ale*_*lke 5

这个答案其实是不正确的。我可能混淆staticstatus。Mozilla 网站有一个关于window.status. 它可能已经这样做了,因此您不会尝试使用该名称作为变量。这样您就不会无意中更新浏览器的状态栏。该功能不再起作用,但我猜编辑器已经滞后了。


Mozilla 文档(比ECMA 参考更容易阅读)中,我们在“未来保留关键字”status部分下找到该关键字。

因此,它被视为一个关键字。

然而,JavaScript 在不同的地方接受保留关键字,例如在句点之后:

a = {}
a.default = 123
a.status = 555
Run Code Online (Sandbox Code Playgroud)

这里我设置了object 的default和成员,尽管这两个名称在语言中被视为保留关键字。statusa

实际上,如果您一直在使用 Promise 对象,您可能已经注意到catch用作可能的回调之一的关键字:

Promise.all([a, b, c])
       .then(...)
       .catch(...)     <-- this is a reserved keyword
       .finally(...)   <-- this is a reserved keyword
Run Code Online (Sandbox Code Playgroud)

以下是相关语法条目:

Identifier :
    IdentifierName but not ReservedWord

MemberExpression :
    PrimaryExpression
    MemberExpression [ Expression ]
    MemberExpression . IdentifierName     <-- look at this one
    MemberExpression TemplateLiteral
    SuperProperty
    MetaProperty
    new MemberExpression Arguments
Run Code Online (Sandbox Code Playgroud)

AnIdentifierName是任何标识符(或多或少[A-Z_$][A-Z_0-9$]*,加上所有 Unicode 字符...它们实际上遵循标识符的 Unicode 定义。)其中包括保留关键字。

正如我们所看到的,您不应该以 a 开头表达式ReserverWord,除非像newand这样的新异常super(此处未显示,请参阅SuperProperty。)

因此,在严格模式下(即在节点模块中),如果您编写以下内容,您应该会收到错误消息:

status = 123
Run Code Online (Sandbox Code Playgroud)

在非严格模式下,status不是保留关键字,因此是允许的。

确保它在访问变量成员时正常工作的一种方法是使用数组语法。例如:

a['default'] = 123
a['status'] = 555
Run Code Online (Sandbox Code Playgroud)

这样,名称就不会被编辑器突出显示为保留关键字。