Javascript 做&&&;and | |运算符将其操作数转换为布尔值?
弗拉纳根的O'Reilly JavaScript书指出: 与&&和| |运算符不同,它的!运算符将其操作数转换为 反转转换值之前的布尔值[…]Javascript 做&&&;and | |运算符将其操作数转换为布尔值?,javascript,Javascript,弗拉纳根的O'Reilly JavaScript书指出: 与&&和| |运算符不同,它的!运算符将其操作数转换为 反转转换值之前的布尔值[…] 如果这些逻辑运算符不将操作数转换为布尔值,如何计算表达式?在计算表达式时,操作数被解释为布尔值,但&&或| |的返回值始终是其中一个操作数 例如: true && 0 === 0, not false 1 || false === 1, not true 它们确实将值转换为布尔值,但仅用于确定如何继续计算表达式。表达式的结果不一定是布尔
如果这些逻辑运算符不将操作数转换为布尔值,如何计算表达式?在计算表达式时,操作数被解释为布尔值,但&&或| |的返回值始终是其中一个操作数 例如:
true && 0 === 0, not false
1 || false === 1, not true
它们确实将值转换为布尔值,但仅用于确定如何继续计算表达式。表达式的结果不一定是布尔值(事实上,如果两个操作数都不是布尔值,则它将不是给您一个布尔值):
因为JavaScript的思想涵盖的不仅仅是布尔运算。Per,第11.11节:二进制逻辑运算符: [evaluation
&&
]的产生。。。评估结果如下:
ToBoolean(lval)
为false,则返回lval李>
|
]的产生。。。评估结果如下:
ToBoolean(lval)
为true,则返回lval李>
&&
和|
的行为可以通过使用truthy和falsy值来简单地解释(对于ToBoolean
所涵盖的:truthy值是ToBoolean
返回true的值,所有其他值都为false)
&&
的逻辑表是:
a b result
truthy any b
falsy any a
a b result
truthy any a
falsy any b
请注意,会返回a
或b
的求值结果
快乐编码
为完整起见,第9.2节: 抽象操作
ToBoolean
将其参数转换为布尔类型的值,如
- 未定义-错误
- 空-假
- 布尔(不是布尔对象!)-结果等于输入参数(无转换)
- 数字(不是数字对象!)-如果参数为+0、-0或NaN,则结果为false;否则结果为true
- string(不是string对象!)-如果参数是空字符串(其长度为零),则结果为false;否则结果为true
- 对象-真实
ToBoolean
(根据ECMAScript ed.5第11.11节)…没有投票了,但这是正确的。没错。如果你把true&&0
放进JS控制台,输出将是0
,但是如果你把If(true&&0){true;}否则{false;}
,输出将是false
。哈哈,是的,这是真的。我现在(非正式地)教给一群13岁的孩子,我想知道他们将来看到其他无聊的语言时会怎么想:-)感谢您详细介绍返回值谢谢!说JavaScript表达式是假的和说它是假的之间有区别吗?@ppecher:“false”表示“行为类似”的值当需要布尔值时,false
。换句话说,ToBoolean
的任何内容都会转换为false
。因此,“
,0
,null
等都是“false”。“false”表示实际的布尔值,false
@ppecher:当你说“false”时,大多数人会认为它是一个布尔值(值为false)。当你说“falsy”时,大多数人会理解它是一个值,如果转换为布尔值,它将为false,但不一定是布尔值本身。另请参阅
a b result
truthy any a
falsy any b