JavaScript语法高亮 - 状态是一个关键字吗?-- 它的用途是什么?



我的 vim 语法突出显示只是让我相信status是 JavaScript 中的一个关键字。

搜索我能找到的都是关于浏览器JavaScript中window.status的文章。这是这个"关键词"status的含义,还是有什么不同的事情发生?

关键字status是什么?

这个答案实际上是不正确的。我可能把staticstatus混淆了.Mozilla网站上有一个关于window.status的页面。它可能已经以这种方式完成,因此您不会尝试将该名称用作变量。这样,您就不会无意中更新浏览器的状态栏。该功能不再起作用,但我想编辑器滞后。


在Mozilla文档(比ECMA参考更容易阅读)中,我们在Future Reserved Keywords部分下找到了status关键字。

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

但是,JavaScript 在各个地方接受保留关键字,例如在一段时间后,如下所示:

a = {}
a.default = 123
a.status = 555

在这里,我设置对象adefaultstatus成员,即使这两个名称在语言中被视为保留关键字。

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

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

以下是相关的语法条目:

Identifier :
IdentifierName but not ReservedWord
MemberExpression :
PrimaryExpression
MemberExpression [ Expression ]
MemberExpression . IdentifierName     <-- look at this one
MemberExpression TemplateLiteral
SuperProperty
MetaProperty
new MemberExpression Arguments

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

如我们所见,您不应该以ReserverWord开头表达式,除了像newsuper这样的新异常(此处未显示,请参阅SuperProperty.)

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

status = 123

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

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

a['default'] = 123
a['status'] = 555

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

如果你在控制台上玩。您可以执行以下操作:

-> status
<- ""
-> window.status
<- ""
-> status='333'
<- "333"
-> status
<- "333"
-> window.status
<- "333"

这对我来说表明关键字status只是window.status属性的别名。我不确定究竟window.status是什么。

编辑:阅读下面的评论后,我意识到Windows对象的属性本质上是全局的。因此,这使得状态与 window.status 相同,而不是我上面提到的别名。

请参阅有关窗口对象的堆栈溢出: 窗口在Javascript中真的是全局的吗?

最新更新