JavaScript 语法高亮 -- status 是关键字吗? ——有什么用?
JavaScript syntax highlighting -- is status a keyword? -- what's it used for?
我的 vim 语法突出显示让我相信 status
是 JavaScript 中的关键字。
在浏览器 JavaScript 中搜索所有我能找到的关于 window.status
的文章。这是这个 'keyword' status
的意思还是有什么不同?
关键字是什么status
?
如果你在你的控制台上玩。您可以执行以下操作:
-> status
<- ""
-> window.status
<- ""
-> status='333'
<- "333"
-> status
<- "333"
-> window.status
<- "333"
这对我来说表明关键字 status
只是 window.status
属性 的别名。我不确定 window.status
到底是什么。
编辑:阅读下面的评论后,我意识到 windows 对象的属性 本质上是 全局的。所以这使得状态与 window.status 相同,而不是我上面提到的别名。
查看关于 window 对象的 Stack Overflow:
Is window really global in Javascript?
这个答案实际上是不正确的。我可能混淆了 static
和 status
。 Mozilla 网站有一个关于 window.status
的页面。它可能已经以这种方式完成,因此您不要尝试将该名称用作变量。这样您就不会无意中更新浏览器的状态栏。该功能不再有效,但我猜编辑器中的内容滞后了。
在 Mozilla documentation (which is easier to read than the ECMA reference 中,我们在 Future reserved keywords 部分下找到 status
关键字。
因此,它被视为关键字。
但是,JavaScript 在各个地方接受保留关键字,例如在句号之后:
a = {}
a.default = 123
a.status = 555
这里我设置了对象 a
的 default
和 status
成员,尽管这两个名称在语言中被视为保留关键字。
实际上,如果您一直在使用 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
开始表达式,除了像 new
和 super
这样的新异常(此处未显示,请参阅 SuperProperty
.)
所以在严格模式下(即在节点模块中)如果你这样写你应该会得到一个错误:
status = 123
在非严格模式下,status
不是保留关键字,因此是允许的。
确保它在访问变量成员时有效的一种方法是使用数组语法。例如:
a['default'] = 123
a['status'] = 555
此外,您的编辑器不会将名称突出显示为保留关键字。
我的 vim 语法突出显示让我相信 status
是 JavaScript 中的关键字。
在浏览器 JavaScript 中搜索所有我能找到的关于 window.status
的文章。这是这个 'keyword' status
的意思还是有什么不同?
关键字是什么status
?
如果你在你的控制台上玩。您可以执行以下操作:
-> status
<- ""
-> window.status
<- ""
-> status='333'
<- "333"
-> status
<- "333"
-> window.status
<- "333"
这对我来说表明关键字 status
只是 window.status
属性 的别名。我不确定 window.status
到底是什么。
编辑:阅读下面的评论后,我意识到 windows 对象的属性 本质上是 全局的。所以这使得状态与 window.status 相同,而不是我上面提到的别名。
查看关于 window 对象的 Stack Overflow: Is window really global in Javascript?
这个答案实际上是不正确的。我可能混淆了 static
和 status
。 Mozilla 网站有一个关于 window.status
的页面。它可能已经以这种方式完成,因此您不要尝试将该名称用作变量。这样您就不会无意中更新浏览器的状态栏。该功能不再有效,但我猜编辑器中的内容滞后了。
在 Mozilla documentation (which is easier to read than the ECMA reference 中,我们在 Future reserved keywords 部分下找到 status
关键字。
因此,它被视为关键字。
但是,JavaScript 在各个地方接受保留关键字,例如在句号之后:
a = {}
a.default = 123
a.status = 555
这里我设置了对象 a
的 default
和 status
成员,尽管这两个名称在语言中被视为保留关键字。
实际上,如果您一直在使用 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
开始表达式,除了像 new
和 super
这样的新异常(此处未显示,请参阅 SuperProperty
.)
所以在严格模式下(即在节点模块中)如果你这样写你应该会得到一个错误:
status = 123
在非严格模式下,status
不是保留关键字,因此是允许的。
确保它在访问变量成员时有效的一种方法是使用数组语法。例如:
a['default'] = 123
a['status'] = 555
此外,您的编辑器不会将名称突出显示为保留关键字。