文章出自个人博客https://knightyun.github.io/2018/06/01/js-logic-compute,转载请申明


逻辑运算符

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

例如:

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

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

短路原则

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

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

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

举例说明:

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

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

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

var a = 9;
if (a > 0)
{alert("true");
} else
{alert("false");
}

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

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

其实也可以这样写:

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

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”

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

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

var a = 1;
if (a > 1)
{alert("true");
}

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


技术文章推送 手机、电脑实用软件分享

JavaScript逻辑运算符“”和“||”短路原则的应用相关推荐

  1. Java位逻辑运算符优先级和短路原则

    一.短路原则 1.逻辑或短路:只要一个为真,或结果就为真,后面的不算了. 2.逻辑与短路:只要有一个为假,结果就为假.如果&&左边的算式结果为假,那么右边的不再运行,直接得出结果为假. ...

  2. python短路原则

    '# #python短路原则' python中 and 和 or 运算的核心思想 --- 短路逻辑 包含一个逻辑运算符 首先从基本的概念着手,python中哪些对象会被当成 False 呢?而哪些又是 ...

  3. java短路运算符有哪些_Java逻辑运算符的短路功能

    逻辑运算包括:与.或.非.异或.共6种运算符.true 表示真.false 表示假. 一.逻辑运算符 下表列出了逻辑运算符: 操作符 描述 &&,& 逻辑与运算符.当且仅当两个 ...

  4. JavaScript逻辑运算符的使用技巧

    前言 !, &&, || 三个运算符是JavaScript中重要的逻辑运算符,本文将介绍这三个运算符在JavaScript实际编程中的有趣使用技巧. 取反运算符(!) 如果对一个值连续 ...

  5. 探寻 JavaScript 逻辑运算符(与、或)的真谛

    十二月已经过半,冬季是一个美妙的季节,寒冷的空气逼得人们不得不躲在安逸舒适的环境里生活.冬季会给人一种安静祥和的氛围,让人沉浸在其中,仿佛是一个旧的阶段的结束,同时也是一个新的阶段的开始.这么说来,西 ...

  6. javascript规范以及设计原则

    UI layer的分离 针对CSS: 尽量不要在JS中的添加过多的动态CSS,可以考虑使用addClass 针对JS中的事件: Keep JavaScript Out of HTML 避免以下的代码 ...

  7. 【推荐阅读】JavaScript 中的 SOLID 原则(一):“S”代表什么

    你可能已经了解过一些设计原则或者设计模式,本文主要渐进的讲解了SOLID原则: 不使用SOLID是怎么编写代码的,存在什么问题? 应该使用SOLID中的哪个原则? 使用SOLID我们应该如何对代码进行 ...

  8. JavaScript 设计模式的七大原则(未完成)

    设计模式(面向对象)有七大设计原则,分别是: 开闭原则:对扩展开放,对修改关闭 单一职责原则:每一个类应该专注于做一件事情 里氏替换原则:父类存在的地方,子类是可以替换的 依赖倒转原则:实现尽量依赖抽 ...

  9. web前端开发学什么,JavaScript逻辑运算符与赋值运算符

    问题: 从浏览器地址栏输入url到请求返回发生了什么 你一看这种烂掉牙的问题,小case,但996面试大佬由此延展的问题已经远远超越了这个问题本身了,不信你就接着看. 我回答了首先会进行 url 解析 ...

最新文章

  1. Nacos 2.0的Spring Boot Starter来了!
  2. 超硬核!躺进BAT以后我总结了出现最多的15道数组题
  3. Spring mvc中@RequestMapping 6个基本用法小结
  4. 1024程序员节持续引爆星城:500万程序员线上线下互动,共迎开源软件、操作系统新时代...
  5. 提高计算机技能操作水平,计算机操作技能比赛方案
  6. 提升网页加载速度—预加载VS预读取
  7. pythoncv2模块详细介绍_【Opencv】【Python】Python中opencv模块cv2一些函数用法及简介...
  8. 客户端js服务端互相调用
  9. 7. memcache 细节
  10. 初学django框架
  11. Abaqus安装在lincense server1出错
  12. 基于imx6ul下调试tlv320aic3x声卡
  13. sqlserver 企业版下载地址
  14. 柴静,你能看见自己吗?
  15. Excel如何将文本中间的数值提取出来
  16. jy-09-SERVLETJSP——Servlet-Cookie-Session
  17. Ubuntu下mingw和aarch64交叉编译x264/x265/openssl/freetype2的ffmpeg
  18. 1.2.2 网络抓包工具之:Fiddler
  19. 计算机网络——配置动态路由实验
  20. 工业互联网平台IMSA---1.3.启动过程详解2

热门文章

  1. absolute和relative元素 设置百分比宽高的差异
  2. eclipse下添加viplugin插件的方法
  3. asp.net 中RadioButtonList的选项改变事件处理(采用jquery操作)
  4. 绑定gridview去掉标题文字粗体。
  5. 程序员的算法课(17)-常用的图算法:深度优先(DFS)
  6. 【短文本相似度】传统方法BM25解决短文本相似度问题
  7. shell进入特权模式_shell的各种运行模式?
  8. Android应用第一次安装成功点击“打开”后Home键切出应用后再点击桌面图标返回导致应用重启问题...
  9. Struts1——离BeanUtils看struts其原理1
  10. 关闭 IOS8 最近使用 最近联系人