js中的 与或运算顺序 (包含例子)

今天在网上查了js的&&和||的相关文章,感觉现在很多人看文章都缺少验证的思想。接下来我来讲一下我对&&和||的了解,以及贴上对应的demo。

首先确认以下几点:&&与||的执行优先级是一样的,不论有多少的混用都是从左到右执行,同时需要注意短路特性
1、JS中的&&符号:
短路 与:A && B
1.1 如果A为false,表达式返回A (这个就是短路特性,提前结束)
1.2 如果A为true,表达式返回B
结论:一假即假(顾名思义,“且” 肯定是 A 且 B同时为真,结果才为真)

下面来些demo

0 && 1  // 结果 0   原因见 1.1
1 && 0  // 结果 0   原因见 1.2
1 && 2  // 结果 2   原因见 1.2

2、JS中的||符号:
|| 短路 或:A || B
2.1 如果A为true,表达式返回A (这个就是短路特性,提前结束)
2.2 如果A为false,表达式返回B
结论:一真即真(顾名思义,“或“ 只要 A 或 B有一个为真,结果就为真)

下面来些demo

1 || 0 // 结果 1  原因见 2.1
0 || 2 // 结果 2  原因见 2.2

对于一个符号的话都比较好理解,对于两个符号混用的也是同样的道理

1 && 3 || 0 && 4  // 结果是 3

很多分析:先执行1&&3 返回3,再执行0&&4返回0,最后执行结果比较 3||0 返回 3,这个过程是不对的,其实正确的执行顺序应该是遵循短路特性,具体过程如下:

第1步:先执行1&&3 因为,1为真,没有提前短路,返回3
第2步:再执行3 || 0 ,这时候3 || 0的时候,因为 || 的第一个是3,
      提前结束,所以返回3,其实是没有执行 0 && 4的。

接下来用一个demo来验证一下:
备注: 为了验证,我们把原先 a 改成 (console.log(“run a”), a),这里用的了 运算符 “,” 这个运算符是取最后一个的值,所以等价。

(console.log("run 1"), 1) && (console.log("run 3"), 3) || (console.log("run 0"), 0) && (console.log("run 4"), 4)

在这里插入图片描述
上面的结果验证了我们的猜想。

其实 && 和 || 很简单,只要知道它们每个返回结果,以及短路特性,就可以算出最后的结果。

&& 和 || 除了判断结果之外,还能给变量赋值默认值的作用
eg:
a = a || “默认值”;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章