hn-failte's blog hn-failte's blog
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

hn-failte

前端cv仔
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Webpack

  • React

  • JavaScript

    • new命令原理
    • ES5面向对象
    • ES6面向对象
    • 多种数组去重性能对比
    • JS随机打乱数组
    • 判断是否为移动端浏览器
    • 将一维数组按指定长度转为二维数组
    • 防抖与节流函数
    • JS获取和修改url参数
    • 比typeof运算符更准确的类型判断
    • 三级目录

    • JavaScript

      • JavaScript之函数尾调用与函数尾递归
      • 一种实现call、apply、bind的方法
      • 实现call、apply、bind
      • JavaScript闭包详解
      • 窗口间的通信与iframe跨域
      • JavaScript逻辑运算符“&&”和“||”短路原则的应用
      • Object原型梳理
      • JavaScript设计模式之发布&订阅模式
      • JavaScript核心:两链一包
      • JavaScript之正则
      • 字符串拼接性能优化
      • JavaScript变量转换
  • Vue

  • 混合开发

  • 学习笔记

  • 微信小程序

  • 前端
  • JavaScript
  • JavaScript
hn-failte
2018-07-30

JavaScript逻辑运算符“&&”和“||”短路原则的应用

# 逻辑运算符

在Javascript中,有逻辑运算符 与 &&, 或 ||, 非 !,常在条件句或循环中进行逻辑判断。

例如:

var a = 1, b = 1, c = 2;
if (a = b && (b = c || a != c))
{
	alert("true");
} else {
	alert("false");
}
1
2
3
4
5
6
7

括号中表达式值为真,最后提示“true”。

# 短路原则

在逻辑运算中,这是一个通用的原则,这是由于表达式从左到右执行的特性,为了减少运算量而给运算器规定的操作。主要针对 && 和 || 两种运算。

  • && 的判断是同真为真,一假为假,则运算如果左边的表达式值为 false,那么就不会再执行右边的表达式了,如果左表达式为 true,就会继续执行右表达式;

  • || 的判断是一真为真,同假为假,则运算如果坐表达式值为 true,那么就不用执行右边的表达式了,如果左表达式为 false,就会继续执行右表达式;

举例说明:

(1 == 1) && alert("msg1");
(1 != 1) && alert("msg2");
(1 == 1) || alert("msg3");
(1 != 1) || alert("msg4");
1
2
3
4

结果是提示**“msg1”和“msg4”**。原理如上述。

因此,如果有以下表达式:

var a = 9;
if (a > 0)
{
	alert("true");
} else
{
	alert("false");
}
1
2
3
4
5
6
7
8

也许你会使用三目运算简化成这样:

var a = 9;
(a > 0) ? alert("true") : alert("false");
1
2

其实也可以这样写:

var a = 9;
(a > 0) && alert("true");
(a > 0) || alert("false");
1
2
3

# Javascript中的应用

在javascript中,只有对象(Object)和布尔值true为真,其它例如 undefined, NaN, false 等,值为 false。为被定义的对象或未赋值变量也是 false,因为其值都是 undefined,这里就可以应用于检查某变量是否已定义。

举例说明:

var a = 1;
var o = new Object();
var b;
a && alert("defined");       //已定义a,提示“defined”
o && alert("defined");       //已定义对象o,提示“defined”
Object && alert("defined");  //Object是一个已知的全局对象,提示“defined”
b || alert("not defined");   //b未赋值,提示“not defined”
p || alert("not defined");   //未定义p,提示“not defined”
1
2
3
4
5
6
7
8

除了这个也能衍生出其它相同原理的应用,类似于判断赋值 var a = (b > 0) && '9' 或判断定义变量 var abc = abc || "" 等。

js中使用这种方法可以减少代码量,提示性能,但同时也降低了代码可读性,比如个人觉得还是看以下代码比较舒适:

var a = 1;
if (a > 1)
{
	alert("true");
}
1
2
3
4
5

方法的选择就要视情况而权衡了。

编辑 (opens new window)
#Operator
上次更新: 2021/08/05, 12:37:41
窗口间的通信与iframe跨域
Object原型梳理

← 窗口间的通信与iframe跨域 Object原型梳理→

最近更新
01
基于 Taro 的微信小程序优化指南
02-16
02
搭建一个极简混合开发架构
08-03
03
使用State Hook
04-06
更多文章>
Theme by Vdoing | Copyright © 2017-2023 hn-failte | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式