为什么 | 和|| 类似于 Javascript 中的分号?

我在 Chrome 的控制台上测试了一些东西,然后我运行了那段代码:


alert() | window.confirm();
 alert() || window.confirm();


我的问题是在不使用分号的情况下在一行中同时运行警报和确认方法。事实证明,两者 | 和|| 有效,我无法想象它为什么有效,首先是因为|| 表示一个 OR 运算符,它应该运行其中一个,而不是同时运行,其次我不知道那是什么。有人可以解释发生了什么,还有什么可以代替


明月笑刀无情
浏览 125回答 3
3回答

斯蒂芬大帝

分号表示语句的结束。如果您还不知道,表达式就是计算出一个值的东西。例如,5、'foobar'和myFn()都是表达式,因为它们的计算结果为值。语句可以由多个表达式组成。例如,const result = fn('foo')将'foo'表达式传递给函数调用,函数调用返回一个赋给 的值result。在您的代码中,这两行都由两个表达式组成,但每一行恰好是一个语句。用这条线:alert() || window.confirm()会先评价alert。由于alert返回undefined,||运算符随后计算右侧的表达式,即window.confirm()。|您可以使用、||或 等运算符将多个表达式组合在一起=。您还可以通过将每个表达式作为单独的语句来评估多个表达式,例如alert(); window.confirm();两者都会导致出现警告框和确认对话框。

繁星淼淼

alert()返回undefined,这是错误的。因此,window.confirm()仍然会运行,以你的例子为例||。至于单个管道字符|,这是按位或,您可以在此处阅读: https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Bitwise

当年话下

The||是一个运算符,例如+or /;它计算了一些东西。在 的情况下||,它计算一个或另一个值是否为真。通常,您会在声明之类的地方使用它if:if (i===0 || j===0) {...}但不限于此;例如,您可以将结果放在一个变量中,然后在if稍后的语句中使用它:have_zero = i===0 || j===0; ...; if (have_zero) {...}||(and ) 运算符&&确实有一件特殊的事情:如果左侧确定答案,则它们不会费心计算右侧(称为“短路评估”)。在这里,你正在计算alert() || window.confirm(),所以它调用alert();正如其他人所指出的,这返回undefinedwhich 并不能确定 的答案||,因此 Javascript 然后调用window.confirm(). 然后答案被丢弃,因为您没有将它放在变量中或以其他方式使用它,但这没关系 - 您想要调用这些方法,您对答案不感兴趣。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript