【问题标题】:JavaScript logical operators internalsJavaScript 逻辑运算符内部
【发布时间】:2013-06-01 20:26:54
【问题描述】:

在阅读 JavaScript 文档时,我遇到了一个 section,这让我很困惑:

“逻辑运算符通常与布尔(逻辑)值一起使用;当它们使用时,它们返回一个布尔值。但是,&& 和 || 运算符实际上返回指定操作数之一的值,所以如果这些运算符是与非布尔值一起使用时,它们可能会返回非布尔值。逻辑运算符如下表所述。

&& Operator: expr1 && expr2

(逻辑与) 如果可以转换为 false,则返回 expr1;否则,返回 expr2。因此,当与布尔值一起使用时,如果两个操作数都为真,则 && 返回真;否则,返回 false。

|| Operator: expr1 || expr2

(逻辑或)如果可以转换为真,则返回 expr1;否则,返回 expr2。因此,当与布尔值一起使用时,||如果任一操作数为真,则返回真;如果两者都为假,则返回假。”

假设你有:

var a3 = false && true; 

所以考虑到“and”运算符的规则,变量 a3 应该包含值 true,因为“false”不能转换为 false。

【问题讨论】:

  • False 可以简单地转换为 false,因为它已经是 false。
  • 为什么false不能转换成falsefalsefalse
  • True 也可以转换为 false。因此任何东西都可以转换为假?
  • 真不能转假。

标签: javascript boolean logical-operators


【解决方案1】:

单词的选择“可以转换为假”源于JavaScript具有truthyfalsey值。

所有值都可以转换为 truthyfalsey 值。

false 是假的,因此不会发生类型 conversion,但其他值会转换为假,例如:

undefined, null, NaN, 0, ""

所以 and 语句将返回 false 而不是 true,因为 false 已经是 false 并且不需要转换。

【讨论】:

  • 我认为你是对的。混乱是由于文档中的单词选择不当造成的。一个更好的方法是,“如果它是一个假值,则返回 expr1;否则,返回 expr2”与“可以转换为假的表达式示例是那些评估为 null 的表达式” , 0, 空字符串 ("") 或未定义。'
  • @robertrocha — 如何将表达式转换为布尔值在ECMA-262 §9.2 中。并且重要的是要区分表达式的值被转换为布尔值only为了比较,返回值是表达式的实际值(例如null转换为false用于比较,但返回值null)。
猜你喜欢
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
相关资源
最近更新 更多