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 相关文章推荐
学习面向对象之面向对象的术语
Nov 30 Javascript
利用jQuery接受和处理xml数据的代码(.net)
Mar 28 Javascript
jQuery插件开发全解析
Oct 10 Javascript
js采用map取到id集合组并且实现点击一行选中一行
Dec 16 Javascript
使用开源工具制作网页验证码的方法
Oct 17 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
Oct 31 Javascript
js 获取今天以及过去日期
Apr 11 Javascript
Vue-Access-Control 前端用户权限控制解决方案
Dec 01 Javascript
vue 注册组件的使用详解
May 05 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
Aug 25 Javascript
jQuery中each和js中forEach的区别分析
Feb 27 jQuery
js字符串类型String常用操作实例总结
Jul 05 Javascript
利用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
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
js时间戳格式化成日期格式的多种方法
2013/11/11 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
2016/05/30 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
2016/06/08 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
JavaScript实现星级评价效果
2019/05/17 Javascript
JS随机密码生成算法
2019/09/23 Javascript
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
使用wxpython实现的一个简单图片浏览器实例
2014/07/10 Python
Python实现Logger打印功能的方法详解
2017/09/01 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
python3实现字符串操作的实例代码
2019/04/16 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
python字典通过值反查键的实现(简洁写法)
2020/09/30 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
Viking比利时:购买办公用品
2019/10/30 全球购物
教育课题研究自我鉴定范文
2013/12/28 职场文书
工业自动化毕业生自荐信范文
2014/01/04 职场文书
户籍证明的格式
2014/01/13 职场文书
英语简历自我评价
2014/01/26 职场文书
市场营销求职信范文
2014/02/21 职场文书
合作意向书模板
2014/03/31 职场文书
优质服务活动实施方案
2014/05/02 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
无保留意见审计报告
2015/06/05 职场文书
小学六年级毕业感言
2015/07/30 职场文书
电力安全学习心得体会
2016/01/18 职场文书
小学三年级数学教学反思
2016/02/16 职场文书