提问人:testing_22 提问时间:9/8/2020 更新时间:9/8/2020 访问量:130
为什么 |和 ||类似于 Javascript 中的分号?
Why | and || are similar to a semicolon in Javascript?
问:
我在 Chrome 上的控制台上测试了一些东西,然后我运行了那段代码:
alert() | window.confirm();
alert() || window.confirm();
我的问题是在不使用分号的情况下在一行中同时运行警报和确认方法。事实证明,两者 |和 ||工作,我无法想象它为什么有效,首先是因为 || 表示一个 OR 运算符,它应该运行其中一个而不是两个,其次 |我不知道那是什么。有人可以解释发生了什么以及还有什么应该起作用而不是;?
答:
alert()
返回 ,这是 false-y。因此,对于您的示例,仍将运行。undefined
window.confirm()
||
至于单个管道字符,这是一个按位 OR,您可以在此处阅读: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Bitwise|
评论
fn1() && fn2()
fn1
fn2
false
false && false
false
fn1() || fn2()
||
true
fn1()
true
fn2()
undefined
是 [falsy,] 为什么它仍然只运行 alert() 和 alert()
中的第一个成员” — 你还能如何确定?逻辑连词和断句从左到右计算它们的操作数,直到析取达到真值或连词达到假值。然后返回该值。如果它们未达到这样的值,则返回最后一个操作数。“如果你有 fn1() &
fn2(),则必须执行函数 fn1 和 fn2
”
— 如果返回一个虚假值,则不执行。应用了类似的短路评估。alert() === undefined
fn1
fn2
&&
fn1
fn2
true
分号表示语句的结尾。
如果您还不知道,表达式是计算结果为值的东西。例如,、 和 都是表达式,因为它们的计算结果为值。5
'foobar'
myFn()
语句可以由多个表达式组成。例如,将表达式传递到函数调用中,函数调用返回一个值,该值被赋值给 。const result = fn('foo')
'foo'
result
在代码中,两行都由两个表达式组成,但每行恰好是一个语句。用这句话:
alert() || window.confirm()
将首先评估。由于 returns ,运算符随后计算右侧的表达式,即 。alert
alert
undefined
||
window.confirm()
您可以使用 、 或 等运算符将多个表达式放在一起。您还可以通过将每个表达式作为单独的语句来计算多个表达式,例如|
||
=
alert();
window.confirm();
两者都将导致出现一个警报框和一个确认对话框。
评论
|
、||
或 =
等运算符将多个表达式放在一起”这句话可能会造成混淆。不能将函数调用放在运算符链中的任何位置,除非在末尾。此外,这里可以提到逗号运算符。=
=
const result = fn('foo')
||
1 || 4
1
4
&&
false && 5
5
5
false && foo()
foo
alert() && window.confirm()
confirm
是运算符,如 or ;它计算一些东西。在 的情况下,它计算一个值或另一个值是否为真。||
+
/
||
通常,你会在类似语句的东西中使用它:但它不仅限于此;例如,您可以将结果放在变量中,然后在稍后的语句中使用它:if
if (i===0 || j===0) {...}
if
have_zero = i===0 || j===0; ...; if (have_zero) {...}
(和)算子确实有一个特殊之处:如果左边决定了答案,他们就不用费心计算右边了(称为“短路评估”)。||
&&
在这里,你正在计算 ,所以它调用 ;正如其他人所指出的,这并不能确定 的答案,因此 Javascript 随后调用 。然后答案被扔掉了,因为你没有把它放在变量中或以其他方式使用它,但这没关系 - 你想调用方法,你对答案不感兴趣。alert() || window.confirm()
alert()
undefined
||
window.confirm()
评论
undefined
||
&&
&&
评论