一、JavaScript里的逻辑运算符有“&&”、“||”和“!”,分别是“与”、“或”、“非”,经常出现在if语句中,分别有以下特点:
- “&&”两边的值同时为真的时候,这个表达式表示布尔值 “true”,只要有任意一边是“false”,则整个表达式为false。(比较严格
- “||”只要两边有任意一个值为真,表达式的值就是“true”。两边全是真,返回“true”,两边全是假,返回“false”。(比较宽容
- “!”后面跟一个表达式,后面的值为真时,返回“false”,否则,返回“true”
二、书上是这样说的,但是谁让咱是新手,总喜欢乱搞,逻辑运算符偏不放在if语句里面,直接输出,看能出现什么效果
有以下代码:
var a = 1&&2
console.log(a)
有了前面的结果,很轻易可以得出 这个是输出“true”的结果,但是很不辛,输出的是“2”。为了搞清楚到底发生了什么。又试了几次:
var a = 3&&5
console.log(a)
上面输出“5”
var a = 10&&8
console.log(a)
上面输出“8”
var a = 10&&0
console.log(a)
上面输出 “0”;
var a = 0&&2
console.log(a)
上面输出 “0”
var a = undefined&&2
console.log(a)
上面输出“undefined”
反复试了几次,终于搞清楚了背后的原因
&&逻辑运算符的原理
- 逻辑运算符从左往右执行
- 当第一个表达式布尔值为真时,直接输出第二个表达式本身(注意不是表达式的布尔值,而是表达式本身的值)
- 当第一个表达式布尔值为“false”时,直接输出第一个表达式本身(注意不是表达式的布尔值,而是表达式本身的值)
- 当有连续的几个&&同时运算时,从前往后看,步骤和上面一样
- 当我们使用if语句时,因为它只能接受一个布尔值,所以会有一个自动转化的过程:
undefined,
NaN,
"",
0,
false
这几个值会转换成“false”,其他类型的值全部全换成“true”;
||逻辑运算符的原理
var a = 0||3||4
console.log(a)
上面的运算输出“3”
- 原理:||运算符从前往后算,若第一个值得布尔值是“false”,则看第二个,如果第二哥值布尔值为“true”,直接输出第二个值的值;如果有两个以上的值,则重复上面的步骤,直到遇到第一个为“true”的值,输出那个值;若所有值全为false,则输出false
!逻辑运算符的原理
“!”运算符在执行时,先把后面的表达式的值转换成布尔值,在取反。false变成true,true变成false