JavaScript逻辑运算
JavaScript 中的逻辑运算符用于在布尔表达式中组合条件,以形成更复杂的判断。以下是 JavaScript 中主要的三种逻辑运算符:
逻辑非 (
!
)单一操作数运算符,用于对一个表达式求反。
它会首先将操作数转换为布尔值,然后返回相反的结果。
例如:
let boolValue = true;
let notBool = !boolValue; // notBool 的值将会是 false
逻辑与 (
&&
)双操作数运算符,当且仅当两个操作数都为真时结果才为真。
如果第一个操作数为假,则不会评估第二个操作数(短路行为)。
例如:
let age = 18;
let isAdult = (age >= 18) && ('John Doe' !== 'anonymous');
// 在这个例子中,如果 age 大于等于 18 且姓名不是 'anonymous',则 isAdult 为 true
逻辑或 (
||
)同样是双操作数运算符,只要有一个操作数为真,则结果就为真。
如果第一个操作数为真,则不会评估第二个操作数(同样有短路行为)。
例如:
let isLoggedIn = false;
let canAccess = isLoggedIn || (checkPassword() === true);
// 在这个例子中,如果 isLoggedIn 是 true 或 checkPassword() 返回 true,则 canAccess 为 true
这些逻辑运算符不仅限于布尔值,它们可以接受任何类型的值,并根据JavaScript的类型转换规则将其转换为布尔值进行计算。
此外,逻辑运算符在实际编程中常用于条件语句、变量赋值以及函数参数传递等方面,帮助开发者构建灵活和复杂的逻辑结构。
二、运算符连续使用
优先级顺序:
1、一元运算总是优先于二元运算,!的优先级高于&&和||;
2、&&的优先级高于||;
优先级:! > && > ||
逻辑或 ||
<script>
console.log('a' || 'b'); //'a'
console.log('' || 'b'); //'b'
var a = 6;
var b = a || 10; //当a不为零时,将a赋值给b;当a为零时,将默认值10赋值给b
console.log(b); //6
console.log(0 || 1); //返回1
console.log(1 || 1); //返回1
console.log(0 || 1); //返回1
console.log(0 || 0); //返回0
</script>
在JavaScript中,逻辑运算符||
(逻辑或)不仅仅用于布尔值的判断,它还具有“短路求值”特性。对于非布尔值,||
运算符会从左到右依次检查其操作数:
当遇到第一个“真”值(即非假值,如非空字符串、非零数字、对象等),它就会立即返回这个真值。
如果所有操作数都是假值(如空字符串、0、null、undefined、NaN等),则返回最后一个操作数。
所以,在你给出的例子中:
console.log('a' || 'b');
输出'a'
,因为非空字符串'a'
是一个真值,所以无需检查第二个操作数'b'
。console.log('' || 'b');
输出'b'
,因为空字符串''
被视为假值,所以继续检查下一个操作数'b'
,并且返回'b'
。var b = a || 10;
变量a
的值为6,是非零数字,因此是一个真值。根据短路求值规则,直接将a
的值赋给b
,所以b
等于6
。如果a
的值是0或者其他假值,那么b
将会被赋值为10。这就是一种常见的在JavaScript中设置默认值的方法。
逻辑与 &&
短路算法:当计算机识别到前一个为假时,会直接终止与逻辑运算并判定结果为假,只有前一个为真时才会继续判定后一个是否为真;
<script>
console.log(4 && 2); //第一个数据为4,转换为布尔值结果为true,&&运算结果由第二个数据决定,返回2
console.log(true && 2); //第一个数据为true,&&运算结果由第二个数据决定,返回2
console.log(0 && 2); //第一个数据为0,转换为布尔值结果为false,&&运算结果为假,返回0
console.log(false && 2);//第一个数据为false,&&运算结果为假,返回false
console.log(0 && 1);//返回false
console.log(1 && 0);//返回false
console.log(1 && 1);//返回true
</script>
逻辑与运算的数据为非布尔类型时,返回值为其中的一个数值,而不是返回true或false;
<script>
var age = parseInt(prompt("请输入你的年龄"));
(age>=18) && alert("你已经成年,可以上网");
(age<18) && alert("你未成年,不可以上网");
</script>
在JavaScript中,逻辑非运算符 !
会将其操作数转换为布尔值,然后返回相反的布尔值。
<script>
console.log(!null); //true
console.log(!NaN); //true
console.log(!' '); //false
</script>
console.log(!null); //true
null
转换为布尔值是false
,所以对其应用逻辑非!
后,结果变成true
。
console.log(!NaN); //true
NaN
(Not-a-Number)转换为布尔值也是false
,因此对其应用逻辑非!
后,结果变为true
。
console.log(!' '); //false
空格字符串
' '
转换为布尔值是true
,因为它是一个非空字符串。对它应用逻辑非!
后,结果变为false
。
总结来说,!
运算符的作用是对一个表达式进行布尔转换,并返回其相反的布尔值。对于 JavaScript 中被视为假值的 null
和 NaN
,它们经过逻辑非后都会变成 true
;而对于非空字符串(即使是空格字符),它们被视为真值,经过逻辑非后会变成 false
。