javascript的逻辑运算符有哪些

文章2023-02-0366 人已阅来源:网络

javascript的逻辑运算符有:1、逻辑与“&&”,只有两个操作数都为true时,才返回true;2、逻辑或“||”,如果两个操作数都为true,或其中一个为true,就返回true;3、逻辑非“!”,把操作数的值转换为布尔值,并取反。

javascript的逻辑运算符有哪些

本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

javascript中的逻辑运算符

逻辑运算符通常用来组合多个表达式,逻辑运算符的运算结果是一个布尔值,只能有两种结果,不是 true 就是 false。下表中列举了 JavaScript 中支持的逻辑运算符:

运算符 名称 示例
&& 逻辑与 x && y 表示如果 x 和 y 都为真,则为真
|| 逻辑或 x || y 表示如果 x 或 y 有一个为真,则为真
! 逻辑非 !x 表示如果 x 不为真,则为真

逻辑与运算

逻辑与运算(&&)是 AND 布尔操作。只有两个操作数都为 true 时,才返回 true,否则返回 false。具体描述如表所示。

逻辑与运算
第一个操作数 第二个操作数 运算结果
true true true
true false false
false true false
false false false

逻辑与是一种短路逻辑,如果左侧表达式为 false,则直接短路返回结果,不再运算右侧表达式。运算逻辑如下:

  • 第 1 步:计算第一个操作数(左侧表达式)的值。

  • 第 2 步:检测第一个操作数的值。如果左侧表达式的值可转换为 false(如 null、undefined、NaN、0、""、false),那么就会结束运算,直接返回第一个操作数的值。

  • 第 3 步:如果第一个操作数可以转换为 true,则计算第二个操作数(右侧表达式)的值。

  • 第 4 步:返回第二个操作数的值。

示例1

下面代码利用逻辑与运算检测变量并进行初始化。

var user;  //定义变量
(! user && console.log("没有赋值"));  //返回提示信息“没有赋值”

等效于:

var user;  //定义变量
if (! user){  //条件判断
    console.log("变量没有赋值");
}

如果变量 user 的值为 0 或空字符串等假值转换为布尔值时,则为 false,那么当变量赋值之后,依然提示变量没有赋值。因此,在设计时必须确保逻辑与左侧的表达式返回值是一个可以预测的值。

var user = 0;  //定义并初始化变量
(! user && console.log("变量没有赋值"));  //返回提示信息“变量没有赋值”

右侧表达式不应该包含赋值、递增、递减和函数调用等有效运算,因为当左侧表达式为 false 时,则直接跳过右侧表达式,会给后面的运算带来潜在影响。

逻辑或运算

逻辑或运算||是布尔 OR 操作。如果两个操作数都为 true,或者其中一个为 true,就返回 true,否则就返回 false。具体如图所示。

逻辑或运算
第一个操作数 第二个操作数 运算结果
true true true
true false true
false true true
false false false

逻辑或也是一种短路逻辑,如果左侧表达式为 true,则直接短路返回结果,不再运算右侧表达式。运算逻辑如下:

  • 第 1 步:计算第一个操作数(左侧表达式)的值。

  • 第 2 步:检测第一个操作数的值。如果左侧表达式的值可转换为 true,那么就会结束运算,直接返回第一个操作数的值。

  • 第 3 步:如果第一个操作数可以转换为 false,则计算第二个操作数(右侧表达式)的值。

  • 第 4 步:返回第二个操作数的值。

示例2

针对下面 4 个表达式:

var n = 3;
(n == 1) && console.log(1);
(n == 2) && console.log(2);
(n == 3) && console.log(3);
( ! n ) && console.log("null");

可以使用逻辑或对其进行合并:

var n = 3;
(n == 1) && console.log(1) || 
(n == 2) && console.log(2) || 
(n == 3) && console.log(3) || 
( ! n ) && console.log("null");

由于&&运算符的优先级高于||运算符的优先级,所以不必使用小括号进行分组。不过使用小括号分组后,代码更容易阅读。

var n = 3;
((n == 1) && console.log(1)) ||
((n == 2) && console.log(2)) ||
((n == 3) && console.log(3)) ||
(( ! n ) && console.log("null")) ||

逻辑与和逻辑或运算符具有以下 2 个特点:

  • 在逻辑运算过程中,临时把操作数转换为布尔值,然后根据布尔值决定下一步的操作,但是不会影响操作数的类型和最后返回结果。

  • 受控于第一个操作数,可能不会执行第二个操作数。

逻辑非运算

逻辑非运算!是布尔取反操作(NOT)。作为一元运算符,直接放在操作数之前,把操作数的值转换为布尔值,然后取反并返回。

示例3

下面列举一些特殊操作数的逻辑非运算返回值。

console.log( ! {} );  //如果操作数是对象,则返回false
console.log( ! 0 );  //如果操作数是0,则返回true
console.log( ! (n = 5));  //如果操作数是非零的任何数字,则返回false
console.log( ! null );  //如果操作数是null,则返回true
console.log( ! NaN );  //如果操作数是NaN,则返回true
console.log( ! Infinity );  //如果操作数是Infinity,则返回false
console.log( ! ( - Infinity ));  //如果操作数是-Infinity,则返回false
console.log( ! undefined );  //如果操作数是undefined,则返回true

示例4

如果对操作数执行两次逻辑非运算操作,就相当于把操作数转换为布尔值。

console.log( ! 0 );  //返回true
console.log( ! ! 0 );  //返回false

逻辑与和逻辑或运算的返回值不必是布尔值,但是逻辑非运算的返回值一定是布尔值。

【推荐学习:javascript高级教程】

以上就是javascript的逻辑运算符有哪些的详细内容!