js中bool值的转换及“&&”、“||”、 “!!”详解


Posted in Javascript onDecember 21, 2017

前言

首先需要知道的是,js中有6个值为false,分别是: 0, '', null, undefined, NaN 和 false, 其他(包括{}, [], Infinity)为true.

可以使用Boolean()函数或是两次取非就能获得对象的布尔值,例如Boolean(undefined)和!!undefined同样能取得布尔值false,

对于0, '', null, undefined, NaN,{}, [], Infinity求布尔值,分别是false false false false false true true true.

因此我们知道的一点是:对象的布尔值是true,即使是对象{}。

bool值转换

数据类型 bool值转化
undefined undefined 转化为 false
Object null 转化为false,其他为 true
Boolean false 转化为 false,true 转化为 true
Number 0,NaN 转化为false,其他为 true
String "" 转化为 false,其他为 true

"&&"

javascript中“&&”运算符运算法则如下:

如果&&左侧表达式的值为真值,则返回右侧表达式的值;否则返回左侧表达式的值。多个&&表达式一起运算时,返回第一个表达式运算为false的值,如果所有表达式运算结果都为true,则返回最右侧一个表达式运算的值。

const aa = {'name': 'xx'};
const bb = aa && aa.age; // bb输出为undefined;
let cc;
const dd = cc && cc.name ? cc.name : undefined; // dd输出为undefined
const dd = cc && cc.name; // dd输出为undefined;

上面两句代码的执行结果是一样的,之前写代码的时候一直用上面的方式,但是发现有些单测覆盖不到,导致单测分支覆盖率很低,换下面的方式就可以很好的解决这个问题,这两句的效果是一样的。

"||"

javascript中"||"运算符的运算法则如下:

如果"||"左侧表达式的值为真值,则返回左侧表达式的值;否则返回右侧表达式的值。多个"||"表达式一起运算时,返回第一个表达式运算结果为true的值,如果所有表达式运算结果都为false,否则返回最右侧的表达式的值。

const aa = false || 'xx'; // aa输出为'xx'

"!!"

"!!"将表达式进行强制转化为bool值的运算,运算结果为true或者false。

const aa = 'xx';
const bb = !!aa; // bb输出为true
const cc = !!(NaN || undefined || null || 0 || '' ); // cc为false;

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Jquery ajax传递复杂参数给WebService的实现代码
Aug 08 Javascript
JS JSON对象转为字符串的简单实现方法
Nov 18 Javascript
JavaScript操作Cookie详解
Feb 28 Javascript
JavaScript中的各种操作符使用总结
May 26 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
Aug 04 Javascript
如何重置vue打印变量的显示方式
Dec 06 Javascript
JavaScript根据json生成html表格的示例代码
Oct 24 Javascript
基于Vue SEO的四种方案(小结)
Jul 01 Javascript
layui表格分页 记录勾选的实例
Sep 02 Javascript
js实现时间日期校验
May 26 Javascript
JavaScript的垃圾回收机制与内存管理
Aug 06 Javascript
jQuery实现简单QQ聊天框
Aug 27 jQuery
利用node实现一个批量重命名文件的函数
Dec 21 #Javascript
详解webpack3编译兼容IE8的正确姿势
Dec 21 #Javascript
利用vue开发一个所谓的数独方法实例
Dec 21 #Javascript
开发Vue树形组件的示例代码
Dec 21 #Javascript
详解使用vuex进行菜单管理
Dec 21 #Javascript
Angular5.1新功能分享
Dec 21 #Javascript
vue2中的keep-alive使用总结及注意事项
Dec 21 #Javascript
You might like
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
对联广告js flash激活
2006/10/19 Javascript
JS日历 推荐
2006/12/03 Javascript
多浏览器兼容的获取元素和鼠标的位置的js代码
2009/12/15 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
JS实现输入框提示文字点击时消失效果
2016/07/19 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
Angularjs中的$apply及优化使用详解
2018/07/02 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
vue 重塑数组之修改数组指定index的值操作
2020/08/09 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
Python迭代和迭代器详解
2016/11/10 Python
详解Python 模拟实现生产者消费者模式的实例
2017/08/10 Python
python实现感知器算法详解
2017/12/19 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
django ajax json的实例代码
2018/05/29 Python
python中实现字符串翻转的方法
2018/07/11 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
Pycharm小白级简单使用教程
2020/01/08 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
有针对性的求职自荐信
2013/11/14 职场文书
新闻编辑自荐书范文
2014/02/12 职场文书
2014年学习全国道德模范事迹思想汇报
2014/09/15 职场文书
青年岗位能手事迹材料
2014/12/23 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
体检通知范文
2015/04/21 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
Django实现聊天机器人
2021/05/31 Python
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技