逻辑与(&&)

逻辑与(&&)操作可以应用于任何的操作类型,不仅仅是布尔值,

在有一个操作数不是布尔值的情况下,&&操作符就不一定返回布尔值:遵循下面规则:

1.如果第一个操作数是对象(广义),则返回第二个操作数
1alert('GeCan' && null)      // null2alert('GeCan' && NaN)       // NaN3alert('GeCan' && 0)         // 04alert('GeCan' && false)     // false5alert('GeCan' && 'GeCan')   // "GeCan"6alert('GeCan' && undefined) // undefined7alert('0' && 'GeCan')       // 'GeCan'8alert(1 && 'GeCan')         // 'GeCan'
2.如果第二个操作数是对象,只有在第一个操作数求值为 true 的情况下才返回该对象

第一个操作数求值为 true;返回该对象

---当第一个操作数是对象,也返回该对象(参考第一点)

1alert(true && 'GeCan')      // 'GeCan'

---否则直接返回第一个数(短路操作)

1alert(null && 'GeCan')      // null2alert(NaN && 'GeCan')       // NaN3alert(0 && 'GeCan')         // 04alert(false && 'GeCan')     // false5alert(undefined && 'GeCan') // undefined6alert('' && 'GeCan')        // '';

---注意,当第一个操作数求值为 true, 但第二个操作数未定义时,会报错

1alert(true && someUndefinedVariable) // error;someUndefinedVariable is not defined
3.如果两个都是对象返回第二个(与上面规则有点重复)
4.如果有一个操作数是 null, NaN,0,false 或 undefined 或 '',则返回它们自己

---第一种情况,这些操作符在第一个,参照上面第2条规则的第一点,直接返回它们自己(短路);

---第二种情况,这些操作符在第二个(第一个操作符求值为 true 之后),也返回它们自己;

1alert(true && null)      // null2alert(true && NaN)       // NaN3alert(true && 0)         // 04alert(true && false)     // false5alert(true && undefined) // undefined6alert(true && '')        // ''

上述规则总结

逻辑与(&&)看左边的值是真还是假,如果是真,返回的是右边的值,如果是假返回的是左边的值(只有false 、0、NaN、null、undefined、空字符串为假, 其余都是真)


逻辑或(||)

逻辑或(||) 和 逻辑与(&&) 的操作相类似只要有一个不是布尔值,||也不一定返回布尔值,遵循下面规则:

1.第一个是对象,就返回第一个(短路)
1alert('GeCan' || undefined) // "GeCan"2alert('GeCan' || 'KaiKai')  // "GeCan"
2.第一个是 false, null, NaN ,0 或 undefined 或 '',则返回第二个操作数;

---第一个操作数求值结果为 false; 返回第二个操作数

1alert(false || null)      // null2alert(false || NaN)       // NaN3alert(false || 0)         // 04alert(false || false)     // false5alert(false || 'GeCan')   // "GeCan"6alert(false || undefined) // undefined

---注意,当第一个操作数求值为 false,但第二个操作数未定义时,会报错

1alert(false || someUndefinedVariable); // error; someUndefinedVariable is not defined

第一个是 null; 返回第二个操作数

1alert(null || null)       // null2alert(null || NaN)        // NaN3alert(null || 0)          // 04alert(null || false)      // false5alert(null || 'GeCan')    // "GeCan"6alert(null || undefined)  // undefined

第一个是 NaN; 返回第二个操作数

1alert(NaN || NaN)         // NaN2alert(NaN || null)        // null3alert(NaN || 0)           // 04alert(NaN || false)       // false5alert(NaN || 'GeCan')     // 'GeCan'6alert(NaN || undefined)   // undefined

第一个是 0;返回第二个操作数

1alert(0 || null)          // null2alert(0 || NaN)           // NaN3alert(0 || 0)             // 04alert(0 || false)         // false5alert(0 || 'GeCan')       // "GeCan"6alert(0 || undefined)     // undefined

第一个是 undefined; 返回第二个操作数

1alert(undefined || null)       // null2alert(undefined  || NaN)       // NaN3alert(undefined || 0)          // 04alert(undefined  || false)     // false5alert(undefined  || 'GeCan')   // "GeCan"6alert(undefined  || undefined) // undefined

第一个是 ''; 返回第二个操作数

1alert('' || null)       // null2alert(''  || NaN)       // NaN3alert('' || 0)          // 04alert(''  || false)     // false5alert(''  || 'GeCan')   // "GeCan"6alert('' || undefined)  // undefined

上述规则总结,

逻辑或(||) 首先看左边的值是真还是假,如果是真,返回的是左边的值,如果是假返回的是右边的值(只有 false 、0、NaN、null、undefined、空字符串为假, 其余都是真)


关于逻辑与(&&)与逻辑或(||)只要记住下面两条规则就够了:

逻辑与(&&)

看左边的值是真还是假,如果是真,返回的是右边的值,如果是假返回的是左边的值
(只有 false 、0、NaN、null、undefined、空字符串为假, 其余都是真)

逻辑或(||)

看左边的值是真还是假,如果是真,返回的是左边的值,如果是假返回的是右边的值
(只有 false 、0、NaN、null、undefined、空字符串为假, 其余都是真)


逻辑运算的应用

1.利用逻辑或(||)
例子一 操作DOM

如果变量的值 不是 false, null, NaN ,0 或 undefined 或 '',则传入该变量;

 1function addMessage(message){ 2    message = message || 'default message'; 3 4    var el = document.createElement('p'); 5    el.innerHTML = message; 6 7    document.body.appendChild(el); 8} 910addMessage(); // 操作默认参数11addMessage('hello world') // 操作我们传入的参数

---谨慎使用 || 填充默认值 !!!

例子二
1function Foo(value){2    value = value || 'default value';3    return value;4}56Foo() // 'default value' ;传递默认参数7Foo('你好') // '你好'

注意:这里传入 false, null, NaN ,0 或 undefined 或 '' 等值,都会使用第二个默认参数!!!

然而实际上只有 undefined 这一种情况才应该被认为是用户没有指定其值,需要使用后备的默认值。

改进版本

1function Foo(value){2    value = value !== undefined ? value : 'defaule value';3    return value;4}

通过这种方式给参数设置默认值,只有在传入 undefined,它的值才会被强制替换为默认值

1Foo(undefined)  // "defaule value"2//以下这些值,都不会被强制替换 (安全了许多!!!) 3Foo('')     // ''4Foo(0)      // 05Foo(NaN)    // NaN6Foo(null)   // null7Foo(false)  // false

补充 ES6 可以这样给参数设默认值

 1function Foo(value = 'default value'){ 2    return value; 3} 4// 替换为默认值 5Foo(undefined)  // "default value" 6// 没有替换;很安全 7Foo('')     // '' 8Foo(0)      // 0 9Foo(NaN)    // NaN10Foo(null)   // null11Foo(false)  // false
2.综合利用 逻辑与(&&) 和 逻辑或(||)
例子一
1function whatDoesItDo(mood){2    return mood && "I like this" || "I don't like this";3}

当 mood 求值结果为 true, 返回 "I like this"(A来代替)

当 mood 求值结果为 false, 返回 "I dont like this"(B来代替)

当 mood 是对象,其也会显示 A。

有点 升级版三元运算符 的感觉;

例子二
1...2this.canSeen(imglist[i]) && this.loadImage(imglist[i], i);3...

缩写,相当于if true

当第一个函数返回的布尔值为true,那么调用第二个函数

1...2if(this.canSeen(imglis[i])) {3    this.loadImage(imglist[i], i)4}5...

---以上---

转载于:https://www.cnblogs.com/rencoo/p/9384710.html

JavaScript 逻辑与() 与 逻辑或(||) 运算规则相关推荐

  1. JavaScript学习总结(四)——逻辑OR运算符详解

    转载自   JavaScript学习总结(四)--逻辑OR运算符详解 在JavaScript中,逻辑OR运算符用||表示 var bTrue = true;var bFalse = false;var ...

  2. JavaScript中的逻辑运算的返回值(逻辑与,逻辑或||,逻辑非!)

    原文链接:https://blog.csdn.net/kevinhjing/article/details/48206787 在JavaScript中,逻辑与非或经常用在条件判断语句中: if( a ...

  3. JavaScript学习总结(二)——逻辑Not运算符详解

    在JavaScript 中,逻辑NOT运算符与C和Java中的逻辑 NOT 运算符相同,都由感叹号(!)表示.与逻辑 OR 和逻辑 AND 运算符不同的是,逻辑 NOT 运算符返回的一定是 Boole ...

  4. 逻辑与和逻辑或的执行顺序

    背景 开发过程中,我们经常用的最多的就是条件表达式了,我们知道&&表示逻辑与,代表两个条件都必须满足才会执行.而||代表逻辑逻辑或,即表示两种只有一个满足即可. 关于逻辑与和或的执行顺 ...

  5. 计算机内部逻辑基础,计算机逻辑基础

    计算机逻辑基础 (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 <计算机组成与工作原理> 第三章 计算机的逻辑基础第三章 ...

  6. 逻辑与(),逻辑或(||),and(),or(|)

    逻辑与和逻辑或都是逻辑运算符,而and和or是位运算符. 逻辑运算符对前后两个值是否为真值进行判断,位运算符则是将前后两个值先转化为二进制再对两个值的对应位的数字进行逻辑运算. 有点不理解?那请看详细 ...

  7. 逻辑运算,逻辑与,逻辑或,逻辑非

    二进制是逢2进位的进位制.0.1是基本算符.现代的电子计算机技术全部采用的是二进制,因为它只使用0.1两个数字符号,非常简单方便,易于用电子方式实现. 逻辑乘法("与"运算) 逻辑 ...

  8. 简单粗暴理解与实现机器学习之逻辑回归:逻辑回归介绍、应用场景、原理、损失以及优化...

    作者 | 汪雯琦 责编 | Carol 来源 | CSDN 博客 出品 | AI科技大本营(ID:rgznai100) 学习目标 知道逻辑回归的损失函数 知道逻辑回归的优化方法 知道sigmoid函数 ...

  9. FPGA之道(15)组合逻辑与时序逻辑、同步逻辑与异步逻辑的概念

    组合逻辑电路与时序逻辑电路 数字电路根据逻辑功能的不同特点,可以分成两大类:一类叫做组合逻辑电路,简称组合电路或组合逻辑:另一类叫做时序逻辑电路,简称时序电路或时序逻辑. 如果数字电路满足任意时刻的输 ...

  10. 回归、线性回归和逻辑回归【逻辑回归部分待完成】

    一.回归 "回归"这个词很有误导性,在陈希孺的<概率论与数理统计>中对这个词的来源有过解释.是个外国人,在做数据分析的时候,发现将数据画出来后,不管大的小的数据都会有一 ...

最新文章

  1. vue 引入的方法 用在template_?【有手就行】轻松打造属于自己的Vue工程化脚手架工具...
  2. 当面试官问这些基础的Python问题时,竟然还有80%的人不会!
  3. 网站采用自建服务器的优点,企业自建网页的方法是怎样的,自建网站有哪些优点呢?...
  4. 从阿里前端工程化中台实践,看中台建设的舍与得
  5. java 内存模型6_深入理解Java内存模型(六)——final
  6. 用MATLAB结合四种方法搜寻罗马尼亚度假问题
  7. rdd分组聚合算子xxByKey,xxBy
  8. MySQL二进制日志(binlog)总结
  9. 良品铺子的2021:营收创新高后的“战术调整”
  10. excel画风玫瑰图_如何用excel制作风向玫瑰图
  11. 无法启动此程序 因为计算机中丢失msvcr71.dll,msvcp71.dll丢失怎样修复_电脑提示计算机丢失msvcr71.dll如何解决...
  12. 美通企业日报 | 凯悦集团将在华新开5家奢华酒店;铁姆肯庆祝成立120周年
  13. 测试和开发怎么互转?
  14. 无人机航拍拍摄制作VR全景图教程
  15. 第四次作业—四则运算
  16. 计算机网络谢希仁(1)
  17. Android Studio显示“Hardcoded String XXX,should use @string resource”的解决方法2-1
  18. 神秘网络蠕虫不搞破坏却让几万台服务器抵抗木马
  19. H5调用相机,裁剪,压缩照片
  20. 小旋风asp服务器出错

热门文章

  1. windows 2003 上Lotus Notes 客户端无法运行的解决办法
  2. 2008流媒体服务器点播搭建详解
  3. 将自己的姿态放低:你应具备赚钱以外的四种能力
  4. TCP/IP源码分析
  5. oracle 监听报错,Oracle启动监听报错:The listener supports no services解决
  6. 计算机相关技能简历,简历计算机技能有哪些
  7. 最简单的基于FFmpeg的视频编码器-更新版(YUV编码为MP4)
  8. LVDS屏的俩种接口:JEIDAVESA
  9. 深入解读Linux进程调度系列——数据结构解析
  10. Linux进程管理之SMP负载平衡