逻辑与操作可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况 下,逻辑与操作就不一定返回布尔值;此时,它遵循下列规则:
如果第一个操作数是对象,则返回第二个操作数;
如果第二个操作数是对象,则只有在第一个操作数的求值结果为 true 的情况下才会返回该 对象;
如果两个操作数都是对象,则返回第二个操作数;
如果有一个操作数是 null,则返回 null;
如果有一个操作数是 NaN,则返回 NaN;
如果有一个操作数是 undefined,则返回 undefined。
逻辑与操作属于短路操作,即如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值。 对于逻辑与操作而言,如果第一个操作数是 false,则无论第二个操作数是什么值,结果都不再可能是 true 了。来看下面的例子:
var found = true; var result = (found && someUndefinedVariable); // 这里会发生错误 alert(result); // 这一行不会执行
在上面的代码中,当执行逻辑与操作时会发生错误,因为变量 someUndefinedVariable 没有声 明。由于变量 found 的值是 true,所以逻辑与操作符会继续对变量 someUndefinedVariable 求值。 但 someUndefinedVariable 尚未定义,因此就会导致错误。这说明不能在逻辑与操作中使用未定义 的值。如果像下面这个例中一样,将 found 的值设置为 false,就不会发生错误了:
var found = false; var result = (found && someUndefinedVariable); // 不会发生错误 alert(result); // 会执行("false")
在这个例子中,警告框会显示出来。无论变量 someUndefinedVariable 有没有定义,也永远不 会对它求值,因为第一个操作数的值是 false。而这也就意味着逻辑与操作的结果必定是 false,根本 用不着再对&&右侧的操作数求值了。在使用逻辑与操作符时要始终铭记它是一个短路操作符。
与逻辑与操作相似,如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值;此时,它遵循下 列规则:
如果第一个操作数是对象,则返回第一个操作数;
如果第一个操作数的求值结果为 false,则返回第二个操作数;
如果两个操作数都是对象,则返回第一个操作数;
如果两个操作数都是 null,则返回 null;
如果两个操作数都是 NaN,则返回 NaN;
如果两个操作数都是 undefined,则返回 undefined。
默认第一个操作数(经过转换)为true,返回第一个,否则返回第二个
与逻辑与操作符相似,逻辑或操作符也是短路操作符。也就是说,如果第一个操作数的求值结果为 true,就不会对第二个操作数求值了。下面看一个例子:
var found = true; var result = (found || someUndefinedVariable); // 不会发生错误 alert(result); // 会执行("true")
我们可以利用逻辑或的这一行为来避免为变量赋 null 或 undefined 值。例如:
var myObject = preferredObject || backupObject;
在这个例子中,变量 myObject 将被赋予等号后面两个值中的一个。变量 preferredObject 中包 含优先赋给变量 myObject 的值,变量 backupObject 负责在 preferredObject 中不包含有效值的情况下提供后备值。如果 preferredObject 的值不是 null,那么它的值将被赋给 myObject;如果 是 null,则将 backupObject 的值赋给 myObject。ECMAScript 程序的赋值语句经常会使用这种模式, 本书也将采用这种模式。
相关推荐
在JavaScript编程语言中,比较操作符是比较两个变量或表达式的值并返回一个布尔值(true或false)的运算符。JavaScript中常用的比较操作符包括大于(>)、小于(<)、大于等于(>=)、小于等于()。这些操作符可以...
MongoDB 是一种流行的开源文档数据库系统,它提供了丰富的查询语言,其中包括多种逻辑查询操作符,用于构建复杂的查询条件。本文将详细介绍 MongoDB 中的四个主要逻辑查询操作符:`$and`、`$nor`、`$not` 和 `$or`。...
以上内容是对JavaScript操作符的全面讲解,包括自增自减、一元加减、位运算、逻辑非、逻辑与以及逻辑或等操作符的定义、用法和一些特殊情况的处理,希望能帮助JavaScript的学习者们更好地理解和掌握这些操作符的应用...
逻辑操作符则用于组合布尔表达式,如与(&&)、或(||)和非(!)。 位操作符,虽然在JavaScript中用得较少,但在处理二进制数据时很有用,例如按位与(&)、按位或(|)、按位异或(^)和按位非(~)。赋值操作符...
今天学习javascript的位操作符,对按位非的操作符(~)产生了疑问,因为以前学的非都是(!)就疑问是我自己记错了还是我买的书本版本太旧了。去百度后发现两者不一样,一个是按位非(~),一个是逻辑非(!)。...
在JavaScript中,运算符和操作符是编程时不可或缺的元素,它们用于执行各种计算、比较和逻辑操作。以下是对JavaScript中常用运算符和操作符的详细总结: 1. **算术运算符**: - `+`:加法,可以用于数值相加,也可...
本文详细介绍了JavaScript中一些不常见的运算符与操作符,包括空值合并运算符、规律空赋值运算符、规律或运算符、规律与运算符以及可选链操作符。通过这些运算符的应用,可以使代码更加简洁高效,同时提高代码的可...
JavaScript是一种广泛使用的高级编程语言,它提供了多种操作符来执行各种计算和逻辑操作。本文总结了JavaScript中常见的几种操作符及其使用方法,包括一元操作符、算数运算符、布尔操作符、乘性操作符、加性操作符...
### JavaScript中的相等操作符(`==`与`===`的区别) #### 一、引言 在JavaScript编程中,比较两个变量是否相等是非常常见的需求。ECMAScript提供了两种主要的相等操作符:“==”(相等)和“===”(全等),它们...
在JavaScript中,`new`操作符是一个至关重要的概念,它用于通过构造函数创建新的对象实例。构造函数是一种特殊类型的函数,通常用来初始化新创建的对象。接下来我们将深入探讨`new`操作符的工作原理,并通过示例进行...
按位与操作符 `&` 是一个二元操作符,用于对两个整数进行逐位逻辑与运算。如果对应的位都是 `1`,那么结果也为 `1`;否则结果为 `0`。 **示例代码**: ```javascript var result = 25 & 3; console.log(result); //...
在JavaScript中,操作符和类型转换以及流程控制语句是编程的基础。下面将详细讲解这些概念。 首先,我们来看操作符: 1. **算术运算符**:JavaScript提供了多种算术运算符,如`+`、`-`、`*`、`/`、`%`。一元运算符...
本文主要探讨了JavaScript中几个易出错的操作符类别,包括算术运算符、比较运算符、逻辑运算符以及赋值和一元运算符的运算顺序和优先级。 首先,我们来看算术运算符。在JavaScript中,有些特殊的字面量值,如`NaN`...
在JavaScript编程语言中,表达式和操作符是构建和执行计算和逻辑判断的基础。本章主要探讨了这两个关键概念。 首先,表达式是由数值、变量和运算符组合而成的结构,它们可以求值并产生结果。例如,"2 + 2"就是一个...
在JavaScript中,`new`操作符是一个至关重要的构造机制,它用于创建对象实例并初始化这些实例。当我们使用`new`操作符调用一个函数时,实际上是在执行一系列步骤来构建一个新对象并设置其属性和方法。以下是`new`...
它可以用于过滤出特定数据类型的文档,这对于数据分析、数据清洗或特定业务逻辑的实现都极其有用。理解并熟练使用`$type`操作符对于MongoDB开发者来说是至关重要的,它能够帮助优化查询性能,提高开发效率。
’、逻辑与’&&’、逻辑或’||’3种,本文将介绍这三种逻辑运算符 逻辑非 逻辑非操作符由一个叹号(!)表示,可以应用于ECMAScript中的任何值。无论这个值是什么数据类型,这个操作符都会返回一个布尔值。逻辑非操作...
在MongoDB中,`$where`操作符是一个特别的功能,允许用户在查询中使用JavaScript表达式或函数来进行复杂的数据筛选。本篇文章将深入探讨`$where`操作符的使用和其潜在的性能影响。 首先,`$where`操作符的基本概念...