小熊奶糖(BearCandy)
小熊奶糖(BearCandy)
发布于 2024-02-22 / 13 阅读
0
0

JavaScript逻辑运算及优先级(转载)

JavaScript逻辑运算

JavaScript 中的逻辑运算符用于在布尔表达式中组合条件,以形成更复杂的判断。以下是 JavaScript 中主要的三种逻辑运算符:

  1. 逻辑非 (!)

    • 单一操作数运算符,用于对一个表达式求反。

    • 它会首先将操作数转换为布尔值,然后返回相反的结果。

例如:

let boolValue = true;
let notBool = !boolValue; // notBool 的值将会是 false
  1. 逻辑与 (&&)

    • 双操作数运算符,当且仅当两个操作数都为真时结果才为真。

    • 如果第一个操作数为假,则不会评估第二个操作数(短路行为)。

例如:

let age = 18;
let isAdult = (age >= 18) && ('John Doe' !== 'anonymous');
// 在这个例子中,如果 age 大于等于 18 且姓名不是 'anonymous',则 isAdult 为 true
  1. 逻辑或 (||)

    • 同样是双操作数运算符,只要有一个操作数为真,则结果就为真。

    • 如果第一个操作数为真,则不会评估第二个操作数(同样有短路行为)。

例如:

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中,逻辑运算符||(逻辑或)不仅仅用于布尔值的判断,它还具有“短路求值”特性。对于非布尔值,||运算符会从左到右依次检查其操作数:

  1. 当遇到第一个“真”值(即非假值,如非空字符串、非零数字、对象等),它就会立即返回这个真值。

  2. 如果所有操作数都是假值(如空字符串、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>
  1. console.log(!null); //true

    • null 转换为布尔值是 false,所以对其应用逻辑非 ! 后,结果变成 true

  2. console.log(!NaN); //true

    • NaN(Not-a-Number)转换为布尔值也是 false,因此对其应用逻辑非 ! 后,结果变为 true

  3. console.log(!' '); //false

    • 空格字符串 ' ' 转换为布尔值是 true,因为它是一个非空字符串。对它应用逻辑非 ! 后,结果变为 false

总结来说,! 运算符的作用是对一个表达式进行布尔转换,并返回其相反的布尔值。对于 JavaScript 中被视为假值的 nullNaN,它们经过逻辑非后都会变成 true;而对于非空字符串(即使是空格字符),它们被视为真值,经过逻辑非后会变成 false

转载:JavaScript逻辑运算符_javascrip 逻辑-CSDN博客


评论