一、逻辑运算符

    1.逻辑与(&&)操作符可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值。逻辑与操作属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。

    特 点:1.运算的时候,会将对应的值转换成布尔值运算,结果不一定是布尔值;

    2.布尔值转换规则:数字非0即真,字符串非空(’’)即真,null undefined false 都是假;

    3.短路操作:代码不执行,逻辑与的短路操作就是,如果第一个操作数为假,立刻结束,不再执行后续的代码。如果为真,一直向后推出为假的短路操作并返回假的操作数,全为真则会返回最后一个操作数;

    2.逻辑或( || )操作符可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况下,逻辑或操作就不一定返回布尔值。逻辑或的操作也属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。

    特 点:1.运算的时候,会将对应的值转换成布尔值运算,结果不一定是布尔值;

    2.布尔值转换规则:数字非0即真,字符串非空(’’)即真,null undefined false 都是假;

    3.短路操作:代码不执行,逻辑或的短路操作就是,如果第一个操作数为真,立刻结束,不再执行后续的代码,并返回这个为真的操作数。如果为假,一直向后推出为真时发生短路操作并返回为真的操作数,全为假则会返回最后一个为假的操作数;

    3.逻辑非操作符由一个叹号(!)表示,可以应用于 ECMAScript 中的任何值。无论这个值是什么数据类型,这个操作符都会返回一个布尔值。逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再对其求反。

    4.空值合并运算符(??),例如:

    value1 ?? value2

    只有当第一个值不为 null 或者 undefined 时,就会返回 value1,如果第一个值为 null 或者 undefined ,就会返回 value2,类似于:

    result = (a !== null && a !== undefined) ? a : b;

    当我们使用 ?? 与 || 或者 && 一起使用时,一定要用括号将 ?? 包起来明确 ?? 的优先级,不然会导致语法错误,这可能是 JavaScript 为了避免人们从 || 切换到 ?? 时发生编程错误。

    let a = null;

    let b = 3;

    let c = ‘’;

    console.log(a ?? b);// 3

    console.log(b ?? c);// 3

    console.log(c ?? b);// ‘’

    逻辑运算符的优先级

    ! > && > || = ??