JavaScript学习笔记
逻辑操作符
js中的逻辑操作符,也称布尔操作符或者逻辑表达式。当用逻辑操作符操作简单的布尔类型值得时候,我们很容易得出结果,但是如果操作数/表达式结果(以下简称为操作数)不是纯布尔类型的值,就没那么简单得出结论了。
1、逻辑非(!)
先从最简单的逻辑非讲起,它放置在一个单独的操作数之前,作用是将该操作数的布尔值进行取反。
它的运算规则是:先将操作数转换为布尔值,然后再对布尔值求反。
也就是说不论操作数是什么类型,都会先将其转换成布尔值,js中除了空字符串、null、undefined、0、false、NaN是假值之外,其他均是真值,包括{}、[]。
2、逻辑与(&&)
逻辑与和逻辑非不同,对于不同的数据类型的操作数,逻辑与的执行规则是不一样的。
2-1、操作数都是布尔值
操作数都是布尔值的时候,当两边都是true的时候,结果为true,如果有一方或者两方都是false,则返回false。
2-2、操作数有非布尔值
当操作数有非布尔值的时候,整个表达式返回的值就不一定是布尔类型的true和false了,我们把操作符两方的数据类型分为两种,真值和假值,当然这个真值或假值可以是数字、字符串、布尔类型、表达式的结果等等,上面已经提到,除了空字符串、null、undefined、0、false、NaN是假值之外,其他均是真值。
运算的结果也是分两种:真值和假值。和&&操作纯布尔值一样,如果两边都是真值,则返回真值,如果两方有一方为假值,则返回假值,但是具体返回哪个真值哪个假值则需要具体讨论。
具体规则为:
- 如果左操作数值为假值,则返回左操作数的值。因为有一方为假值,则必然为假,这时不会对右操作符进行操作,形成“逻辑短路”(逻辑短路是对于逻辑运算而言,是指仅计算逻辑表达式中的一部分便能确定结果,而不对整个表达式进行计算的现象。)。
- 如果左操作数是真值右操作数为假值,则整个表达式为假值,并以右操作数的值作为整个表达式的结果。
- 如果左操作数和右操作数都为真值,则整个表达式为真值,并以右操作数的值作为整个表达式的结果。
3、逻辑或(||)
理解了逻辑与,逻辑或就好理解了。
3-1、操作数都是布尔值
操作数都是布尔值的时候,当两边都是false的时候,结果为false,如果有一方或者两方都是true,则返回true。
2-2、操作数有非布尔值
运算的结果也是分两种:真值和假值。和&&操作纯布尔值一样,如果两边都是假值,则返回假值,如果两方有一方为真值,则返回真值,但是具体返回哪个真值哪个假值则需要具体讨论。
具体规则为:
- 如果左操作数值为真值,则返回左操作数的值。因为有一方为真值,则必然为真,这时不会对右操作符进行操作,也是“逻辑短路”的一种现象。
- 如果左操作数是假值右操作数为真值,则整个表达式为真值,并以右操作数的值作为整个表达式的结果。
- 如果左操作数和右操作数都为假值,则整个表达式为假值,并以右操作数的值作为整个表达式的结果。