逻辑运算符Javascript && [重复]
Posted
技术标签:
【中文标题】逻辑运算符Javascript && [重复]【英文标题】:Logical operators Javascript && [duplicate] 【发布时间】:2020-10-02 10:41:46 【问题描述】:当我运行此代码时,首先显示 1,然后显示未定义。但是还是没看懂。
alert(alert(1) && alert(2));
这里有一些解释:
对警报的调用返回未定义(它只是显示一条消息,因此没有有意义的返回)。
因此,&&
计算左操作数(输出 1)并立即停止,因为 undefined 是一个假值。而&&
寻找一个假值并返回它,这样就完成了。
【问题讨论】:
那么你的问题是什么?你似乎已经知道发生了什么。 "&&
或 ||
运算符产生的值不一定是 Boolean
类型。产生的值将始终是两者之一的值操作数表达式。" (Source)
您的预期结果是什么?
【参考方案1】:
alert 不返回任何内容
所以alert(1)
运行,因为警报不返回任何未定义的内容。结果你有alert(undefined && alert(2))
。 alert(2)
不会执行,因为左部分需要真实执行。未定义是错误的。计算结果为alert(undefined)
。
因此,第一个警报的警报为 1,而外部警报的警报未定义,并且永远不会执行 alert(2)。
以不那么混乱的方式编写代码
var action = alert(1) && alert(2) // only runs alert(1)
console.log(action) // shows variable is undefined
alert(action) // alerts undefined
【讨论】:
我说我不明白,首先显示“1”,然后显示“未定义”。我不明白它为什么以及如何工作? 我不知道该怎么解释。你了解 && 的工作原理吗?你期待它是什么? 对于每个操作数,将其转换为布尔值。如果结果为假,则停止并返回该操作数的原始值。如果所有操作数都已被评估(即所有操作数都是真实的),则返回最后一个操作数。是的,我完全理解上面的意思。它首先是未定义的。这是假的。但它运行警报 1,然后显示我未定义。我不明白为什么它会这样运行。我只是想在逻辑上抓住主要思想 将代码添加到末尾。我认为您没有掌握外部警报运行的事实。评估警报中的代码,然后运行警报。该代码实际上没有任何实际意义,因此令人困惑。以上是关于逻辑运算符Javascript && [重复]的主要内容,如果未能解决你的问题,请参考以下文章
有人能解释一下为啥“运算符优先级”适用于 javaScript 中的“||”、“&&”等逻辑运算符吗