作为一个后端开发的程序员,一直就对JavaScript情有独钟,作为一门前后端通吃的语言,必须赞一下。而且之前很长一段时间都有在做JavaScript,一路都是和ie8死磕,磕完又找低版本的谷歌磕,坑坑洼洼不计其数,但是收获就是了解到JavaScript很多好用的特性,熟练使用这些特性,不仅能加快开发速度,还能让自己的代码看起来不至于那么low,这是每个前端程序员都想做到的!

  逻辑运算

  JavaScript中逻辑运算有3中:且(&&),或(||),非(!),不过在说这三种逻辑运算之前,先解释一下JavaScript中的布尔类型。

  JavaScript和其它高级语言一样,布尔类型有true和false两种,但是与其它语言不同的地方,也是JavaScript很奇妙的一个地方是,JavaScript中的任何类型都可以转化成布尔类型,转化规则如下:

  false:false,0,null,undefined,空字符串(“”和‘’),NaN

  true:上面可转换为false以外的所有数据都转换为true

    也就是说,我们以后再if条件判断中,很多时候没有比较去使用等于去判断,而是直接使用要判断的对象就可以了,比如下面的代码:

        var a;
if (a == undefined) {
console.log("a is undefined");
} else {
console.log("a is " + a);
}

  直接使用  

        var a;
if (a) {
console.log("a is undefined");
} else {
console.log("a is " + a);
}

  或者直接使用三元运算符:  

        var a;
a ? console.log("a is " + a) : console.log("a is undefined");

  当然这么用要具体需求具体看,毕竟0和空字符串也会被转换成false,但是0和空字符串有时却又是合法的业务逻辑,所以这点要注意

  言归正传,一般的,我们所说的逻辑运算,都是对布尔类型的运算,与(&&)运算时当且仅当两边都是true时才返回true,否则返回false,或(||)运算是当且仅当两边都是false时返回false,否则返回true,非(!)运算时取反,当判断是true时返回false,当判断是false时返回true,注意了,这是一般的思维,毕竟像java,C#等等高级语言都是这样的,JavaScript的用法也基本是这样,但是又不一样!JavaScript的逻辑运算规则如下:  

  与(&&):如果左边表达式判断是false,则返回左边表达式的值,否则返回右边表达式的值

  或(||):如果左边表达式判断为true,则返回左边表达式的值,否则返回右边表达式的值

  非(!):如果表达式判断为true,则返回false,否则返回true

  注意了,与(&&)和或(||)运算最终返回的是表达式的值!回的是表达式的值!回的是表达式的值!重要的事情说三遍。这个值不一定是布尔类型的true或者false,可以是其他类型的值!!!这有什么用呢?

  曾几何时,我们是否写过这样的代码:   

  function f(a, b) {
if (a == null) {
a = {}
} if (b != null) {
b.say();
}
}

  我们可以简化成:  

    function f(a, b) {
a = a || {};
b && b.say();
}

  这样写,一方面代码量少了,另一方面代码不会显得那么low,总之,就是记住与(&&)和或(||)的运算规则,从左想让开始运算,并返回表达式的值,而非true或false。当然,如果表达式返回的是true或者false,那与(&&)和或(||)返回的也就是true或者false了。而我们经常会写一些简单的if判断,一个判断做一个事,另一个判断做另一件个事,这样判断完全可以用与(&&)和或(||)来代替,让代码看起来更美观,换句话说就是,与(&&)和或(||)的作用是可以处理逻辑运算,另一个重要的作用就是用来代替if做判断!

  如果你看一些开源项目的源码,比如jquery等,与(&&)和或(||)在里面用的是很多的,多数都是代替if做判断!

  非(!)运算就比较简单了,一般就是拿来取反的,对true返回false,对false返回true,但是还有一种特性,上面的运算规则可以看到,非(!)运算返回的始终是布尔类型,这样,当我们确切需要某些值必须是布尔类型是,这个运算就很有用,比如jQuery的each函数,当且仅当函数返回false时,就会跳出遍历,如下面的代码:  

        var a = [1, null, 3];
$.each(a, function (i, t) {
console.log(i, t);
if (!t) {
return false;//跳出循环
}
})

  可以写成:  

        var a = [1, null, 3];
$.each(a, function (i, t) {
console.log(i, t);
return !!t;
})

  总之,熟悉逻辑运算的规则,熟练使用逻辑,可以简化我们的代码,使代码看起来简洁舒适

javascript中逻辑运算(||,&&,!)的更多相关文章

  1. 你知道JavaScript中的结果值是什么吗?

    你知道JavaScript中的每条语句.甚至表达式都有一个结果值吗? 当你在浏览器中测试代码时,经常会在控制台的输出结果的最后面多出一条,大部分为undefined,这个undefined就是一个结果 ...

  2. javascript中的true和false

    今天遇到一个问题,执行下面的代码返回true还是false?请说明理由 console.log([] == ![]) 在浏览器中运行了一下,发现结果是true.为什么会这样呢?于是查找了相关的资料. ...

  3. JavaScript 中常用的 正则表达式

    这编文章我来整理了一些在 javascript 中常用的正则式希望能给大家带来一些开发的灵感 //校验是否全由数字组成 function isDigit(s) { var patrn=/^[0-9]{ ...

  4. Javascript中的 “&” 和 “|” 你知多少?

    .v-top { position: relative; top: -5px; font-size: 12px } 一.前言: 在文章开始之前,先出几个题目给大家看看: var num1 = 1 &a ...

  5. JavaScript中常用的正则表达式日常整理(全)

    //校验是否全由数字组成 ? 1 2 3 4 5 6 function isDigit(s) { var patrn=/^[0-9]{1,20}$/; if (!patrn.exec(s)) retu ...

  6. Javascript中的 “&” 和 “|” 详解

    转自:https://www.jb51.net/article/104394.htm 一.前言: 在文章开始之前,先出几个题目给大家看看: var num1 = 1 & 0; console. ...

  7. JavaScript中“&&”和“||”操作符的意义,深入理解和使用场景

     一.概念 与其他语言不同,在js中,逻辑运算符可以返回任何类型的数据,不仅仅是true和false. &&和||的返回值是两个操作数的其中一个.即a&&b或者a||b ...

  8. 全面解析JavaScript中“&&”和“||”操作符(总结篇)

    1.||(逻辑或), 从字面上来说,只有前后都是false的时候才返回false,否则返回true. ? 1 2 3 4 alert(true||false); // true alert(false ...

  9. JavaScript中判断变量类型最简洁的实现方法以及自动类型转换(#################################)

    这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了type ...

随机推荐

  1. 使用jquery刷新页面以及javascript的一些基本函数

    如何使用jquery刷新当前页面 下面介绍全页面刷新方法:有时候可能会用到 1.window.location.reload()刷新当前页面. 2.parent.location.reload()刷新 ...

  2. Spring Cloud Alibaba 整合 Nacos 实现服务配置中心

    在之前的文章 <Nacos 本地单机版部署步骤和使用> 中,大家应该了解了 Nacos 是什么?其中 Nacos 提供了动态配置服务功能 一.Nacos 动态配置服务是什么? 官方是这么说 ...

  3. Identity Server 4 从入门到落地(十)—— 编写可配置的客户端和Web Api

    前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...

  4. 第46篇-signature_handler与result_handler

    在之前介绍为native方法设置解释执行的入口时介绍过,当Method::native_function为空时会调用InterpreterRuntime::prepare_native_call()函 ...

  5. APS高级计划排程系统和生产排产系统

    一.什么是APS高级计划排程系统 APS高级计划与排程是解决生产排程和生产调度问题,常被称为排序问题或资源分配问题. 目前,市场逐步走向个性化.以销定产模式:生产逐步以多品种小批量形成存在.对于离散制 ...

  6. C语言程序设计:二分查找(折半查找)

    目录 C语言程序设计:二分查找(折半查找) 1.什么是二分查找 2.二分查找的优点 3.二分查找的缺点 4.二分查找原理 5.源代码实现 6.后话 C语言程序设计:二分查找(折半查找) 1.什么是二分 ...

  7. 关于@Autowired和@Resource注解区别

    区分一下@Autowired和@Resource两个注解的区别: 1.@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配 2.@A ...

  8. 如何在 GitHub 上高效阅读源码?

    原文链接: 如何在 GitHub 上高效阅读源码? 之前听说过一个故事,一个领导为了提高团队战斗力,把团队成员集中起来,搞封闭开发,重点还是在没有网的条件下. 结果就是一个月过去了,产出基本为零. 我 ...

  9. CF918B Radio Station 题解

    Content 有 \(n\) 个形如 \(a_i.b_i.c_i.d_i\) 的 IP 地址.有 \(m\) 条命令,每条命令由一条字符串 \(s\) 和一个形如 \(p.q.r.s\) 的 IP ...

  10. Python第三周 函数详解

    def 函数名(): """注释说明"""" 执行逻辑体 return 返回值 定义不带参数的函数 带参数的函数 默认参数 这个是 ...