问题:三目运算符是否存在缩写?

  1. 使用过 PHP 的同学应该知道,三目运算符是有缩写的,当然百度也有相关资料提到过
  2. 于是我实际测试了一下,发现 C 语言也有类似的缩写形式,结果让我对三目运算符的定义有些“惊讶”。 Image
  3. 然后,我又去测试了一下 JS,结果并不尽如人意。
    Image
    当使用完整的三目运算符形式时,JS 就不会报错了。

逻辑运算符&&是否可以代替 if 语句?

在一些语言,例如在 JS 中:

  • a && b 如果afalse,那么返回false,并且后续的b就不会被计算了,因为短路原则会直接返回false
  • 如果atrue,则继续计算b,最终返回b的值。

||也有类似的规则,这里就不详细展开了。
Image

毫无疑问,非零的数字在逻辑运算中都被认为是true
接下来我们看看在 C 语言中的表现:
Image

嗯,C 语言中的行为是:
true && b 会继续检查b的值,如果bfalse,则整个表达式为false,否则为b的值。
但值得注意的是,C 语言中的逻辑运算符并不会像 JS 那样直接充当if的作用。

实际上,JS 中的逻辑运算符行为与条件运算符的缩写形式有些相似。

&& 是否会超越括号的优先级?

接着上面的问题,

true && b时,如果afalse,就不再计算b。那么,如果先给b赋值,优先级会如何呢?

我进行了实际测试:

Image

结果是:优先级的作用被忽视了
这是一个奇特的例子,显示了逻辑运算符在某些情况下忽略了优先级。

老师的回复:在分析优先级时,应该仔细检查每行代码,确保优先级高的部分先执行,尽管&&运算符会先计算,但这只是它的工作机制。


好,今天的折腾日记就到这里了。