JavaScript 逻辑且(&&)和逻辑或(||)的运用小结

 更新时间:2022年09月05日 11:45:17   作者:Enziandom  
这篇文章主要介绍了JavaScript 逻辑且(&&)和逻辑或(||)的妙用 ,通过实例代码介绍了逻辑且(&&)和逻辑或(||)的详细用法,需要的朋友可以参考下

简单运用

逻辑且(&&):左右必须都满足 true 才返回 true;逻辑或(||):左右其中一个满足 true 就返回 true。

这样简单的运用是整体返回一个布尔值,适合在语句判断的时候用:

let user = localStorage.getItem("user");

if (user && user.age > 10) {
  // ...
}

当 user 存在时(即 true),且 user 的 age 字段大于 10,if语句得到的布尔值才是 true,第一个条件句才执行。

进阶运用

上面都是逻辑且和逻辑或的简单使用,其实它们大有用处,还能简化代码。运算符操作的对象称之为操作数(Operand)。

逻辑且

左边操作数结果右边操作数结果执行的操作数整体结果
truetruetrue
falsetruefalse
truefalsefalse
falsefalsefalse

根据上表格得出一个结论:

  • 如果左操作数的结果是一个 true,就执行右操作数。
  • 如果左操作数的结果是一个 false,就执行左操作数。

假设传入了回调函数就执行,否则跳过不执行。一般想到的是用 if 条件语句,或者三元运算符简化 if 条件语句。然而,利用逻辑且(&&)的特性可以进一步简化代码:

function fun(callback) {
  // ...
  callback && callback();
}

fun(() => console.log("execute callback function.")); // 控制台打印了字符串!
fun(); // 什么也没有发生!

逻辑或

左边操作数结果右边操作数结果执行的操作数整体结果
truetruetrue
falsetruetrue
truefalsetrue
falsefalsefalse

根据上表得出结论:

  • 如果左操作数的结果是一个 true,就执行左操作数。
  • 如果左操作数的结果是一个 false,就执行右操作数。

简而言之,逻辑或(||)一旦遇到操作数的结果是 true,就执行这个操作数,而另一个操作数直接忽略不执行,即“短路”。

逻辑且提供默认值

if 语句提供默认值:

function fun(x) {
  if (!x) {
    x = "default value";
  }
  console.log(x);
}

fun(undefined); // "default value"
fun("inject a value"); // inject a value

逻辑且提供默认值:

function fun(x) {
  x = !x && "default value";
  console.log(x);
}

fun(undefined); // "default value"
fun("inject a value"); // false

逻辑且要判断第一个操作数(左操作数)是不是 false,如果是就直接执行第一个操作数。我本来就有默认值要提供,但第一个操作数就已经截断了第二个操作数的执行。上面的代码,为了保证参数提供的是假值而执行第二个操作数的结果,导致传入非假值返回的是 false。

可能是我没有想到更好的方式,所以,我认为逻辑且(&&)不适合用来提供默认值。

逻辑或提供默认值

实际上逻辑或提供默认值才是等价于上面说到的 if 语句提供默认值的逻辑:

function fun(x) {
  x = x || "default value";
  console.log(x);
}
fun(undefined); // "default value"
fun("inject a value"); // inject a value

所以,我认为逻辑或(||)适合提供默认值这一工作。

比较两者

逻辑或(||)的用处比逻辑且的用途广。前面说到,逻辑且(&&)不适合提供默认值,而逻辑或(||)既适合提供默认值,也适合做决定是否执行回调函数等一些列工作。

改造进阶运用 - 逻辑且的例子代码:

function fun(callback) {
  // ...
  !callback || callback();
}

fun(() => console.log("execute callback function.")); // 控制台打印了字符串!
fun(); // 什么也没有发生!

更多逻辑或的例子

属性的默认值

setTitle(options.title || 'untitled');

在给函数传递参数时,如果 options.title 是 null 或者其他之类的假值,就提供字符串untitled给函数。

函数结果的默认值

function countOccurrences(regex, str) {
  return (str.match(regex) || []).length;
}

match()方法会返回一个数组或 null。得益于逻辑或(||),在后一种请看下可以设置一个默认值。因此,在这两种情况下你都可以安全地访问 length 属性。

到此这篇关于JavaScript 逻辑且(&&)和逻辑或(||)的妙用的文章就介绍到这了,更多相关JavaScript 逻辑且(&&)和逻辑或(||)内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JS实现的竖向折叠菜单代码

    JS实现的竖向折叠菜单代码

    这篇文章主要介绍了JS实现的竖向折叠菜单代码,涉及JavaScript动态遍历页面元素及样式修改的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • JavaScript中的this到底是什么(一)

    JavaScript中的this到底是什么(一)

    JavaScript中的this总是让人迷惑,应该是js众所周知的坑之一。 个人也觉得js中的this不是一个好的设计,由于this晚绑定的特性,它可以是全局对象,当前对象,或者…有人甚至因为坑大而不用this
    2015-12-12
  • JS使用new操作符创建对象的方法分析

    JS使用new操作符创建对象的方法分析

    这篇文章主要介绍了JS使用new操作符创建对象的方法,结合实例形式分析了javascript面向对象程序设计类的定义、new操作符对象的创建及相关操作注意事项,需要的朋友可以参考下
    2019-05-05
  • 分析uniapp如何动态获取接口域名

    分析uniapp如何动态获取接口域名

    本文主要介绍了uniapp如何动态获取接口域名,感兴趣的同学,可以参考下,并且试验一下。
    2021-06-06
  • JS检测是否可以访问公网服务器功能代码

    JS检测是否可以访问公网服务器功能代码

    检测AC是否放行成功,是否可以访问公网阿里云服务器。下面给大家分享JS检测是否可以访问公网服务器功能代码,需要的的朋友参考下吧
    2017-06-06
  • uniapp中如何修改图标和名称

    uniapp中如何修改图标和名称

    这篇文章主要给大家介绍了关于uniapp中如何修改图标和名称的相关资料,uni-app是一个使用Vue.js开发跨平台应用的前端框架,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • 在Z-Blog中运行代码[html][/html](纯JS版)

    在Z-Blog中运行代码[html][/html](纯JS版)

    在Z-Blog中运行代码[html][/html](纯JS版)...
    2007-03-03
  • 前端实现下载文件(包含压缩包下载)方式详细总结

    前端实现下载文件(包含压缩包下载)方式详细总结

    这篇文章主要给大家介绍了关于前端实现下载文件(包含压缩包下载)方式的相关资料,这段时间项目需要下载文件,所以这里给大家总结下,需要的朋友可以参考下
    2023-09-09
  • JavaScript实现解析INI文件内容的方法

    JavaScript实现解析INI文件内容的方法

    这篇文章主要介绍了JavaScript实现解析INI文件内容的方法,结合实例形式分析了javascript通过自定义函数实现针对ini文件解析操作的相关处理技巧,需要的朋友可以参考下
    2016-11-11
  • javascript实现3D切换焦点图

    javascript实现3D切换焦点图

    一款用JavaScript模仿3D立体切换效果的js焦点幻灯片特效,使用方法很简单:用鼠标拖拽图片向左右方向就好~
    2015-10-10

最新评论