【问题标题】:What are 'true' and 'false' and 'null'?什么是“真”、“假”和“空”?
【发布时间】:2012-09-05 20:05:45
【问题描述】:

为什么它们不是关键字?它们是什么?

true, false, null

更新快速回答

这些是保留字,但它们不是关键字。

规范验证的小技术区别 - ES3 和 ES5

【问题讨论】:

  • 是什么让你说它们不是保留字? true = 6 永远不会起作用,这使它成为保留字。
  • 对不起...它们不是关键字。

标签: javascript keyword


【解决方案1】:

它们是布尔文字。来自specification:

BooleanLiteral ::
   true
   false
  • 布尔文字true的值是布尔类型的值,即true。
  • 布尔文字false的值是布尔类型的值,即false。

这类似于10 是数字文字 或'foo' 是字符串文字。

保留字包括关键字和文字。 true 和 false 是保留词,但它们不是关键字。以下是关键字:

break    do       instanceof typeof
case     else     new        var
catch    finally  return     void
continue for      switch     while
debugger function this       with
default  if       throw
delete   in       try

请注意,true 和 false 不会出现在此列表中。

我认为您的困惑来自于没有意识到 keyword 和 reserved word 这两个术语是不一样的。每个关键字都是保留字,但不是每个保留字都是关键字。

【讨论】:

  • @Hiro,真不幸。也就是说,您可以放心,Javascript 实现者会坚持规范,而不是遵循 The Good Parts,尽管它们可能具有启发性。
【解决方案2】:

其实true和false是Javascript中的保留字,来自:

http://ecma-international.org/ecma-262/5.1/#sec-7.6.1

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

Syntax
    ReservedWord ::
        Keyword
        FutureReservedWord
        NullLiteral
        BooleanLiteral

在

http://ecma-international.org/ecma-262/5.1/#sec-7.8.2

你可以阅读:

Boolean Literals

Syntax
    BooleanLiteral ::
        true
        false

【讨论】:

  • 你忘了:浏览器实现的谎言
  • ECMA-262 是标准。如果它在撒谎,那你就完蛋了。
  • 我想我只是从这里阅读规范,并做出自己的解释。
【解决方案3】:

Mozilla Documentation

此外,字面量 null、true 和 false 保留在 用于正常使用的 ECMAScript。

它们实际上似乎是“保留”使用的,但我不知道为什么它们没有被列为保留字。

【讨论】:

  • 是的,我不知道为什么它没有列在保留字列表中,我只是链接到说明它们是为字面使用而保留的文本。
  • 它们没有被列出,因为它们不是关键字;它们只是具有特殊名称的值。请注意,undefined 和 null 也不在 MDN 的列表中。
  • @Hiro:问题是,42 也应该在名单上吗?数字也是文字,并且具有同样有效的大小写。一些文字是用字母而不是数字拼写的这一事实并没有改变它们是文字而不是关键字。
  • 我没有定义什么是 ES5 的“保留字”。您不想混淆两个不同的概念...关键字和保留字...pqnet 有链接到 ES5 中定义的位置。
  • @Hiro:我有一份 ECMA-262 的副本(它以 PDF 格式免费提供),所以我可以在需要时轻松查找此类内容:)
【解决方案4】:

使用非对象 javascript,您只需编写

if( sami.value = true) //Noticed i didn't put ==

如果是对象 Boolean 对象代表两个值:“true”或“false”。

以下代码创建一个名为 myBoolean 的布尔对象:

var myBoolean=new Boolean();

如果布尔对象没有初始值,或者如果传递的值是以下之一:

0
-0
null
""
false
undefined
NaN

对象设置为假。对于任何其他值,它都设置为 true(即使使用字符串“false”)!

【讨论】:

  • 我认为你误解了这个问题
  • 您还应该通过将代码标记为代码/等来正确格式化您的答案,这样所有人都可以轻松阅读它们。
  • 谢谢我不知道我在这里真的很了解:P
猜你喜欢
  • 2020-01-04
  • 2017-02-20
  • 2018-07-01
  • 2014-09-07
  • 2015-07-25
  • 2019-01-30
  • 1970-01-01
  • 2020-01-06
相关资源
最近更新 更多