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 相关文章推荐
JavaScript与C# Windows应用程序交互方法
Jun 29 Javascript
初学JavaScript第二章
Sep 30 Javascript
jquery遍历checkbox的注意事项说明
Feb 21 Javascript
JS获取几种URL地址的方法小结
Feb 26 Javascript
JavaScript中的Math 使用介绍
Apr 21 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
Mar 07 Javascript
纯JS代码实现气泡效果
May 04 Javascript
Bootstrap简单表单显示学习笔记
Nov 15 Javascript
微信小程序之仿微信漂流瓶实例
Dec 09 Javascript
Angularjs实现多图片上传预览功能
Jul 18 Javascript
vue2.0 下拉框默认标题设置方法
Aug 22 Javascript
用vue写一个日历
Nov 02 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
无线电的诞生过程
2021/03/01 无线电
Apache2 httpd.conf 中文版
2006/11/17 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
php中strtotime函数性能分析
2016/11/20 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
SVG实现时钟效果
2018/07/17 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
electron实现静默打印的示例代码
2019/08/12 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
Vue中jsx不完全应用指南小结
2019/11/01 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
python实现最速下降法
2020/03/24 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
移动端开发HTML5页面点击按钮后出现闪烁或黑色背景的解决办法
2018/09/19 HTML / CSS
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
如何设置Java的运行环境
2013/04/05 面试题
妇科医生自荐信
2013/11/05 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
2014离婚协议书范文(3篇)
2014/11/29 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
工程质量保证书
2015/05/09 职场文书
天堂的孩子观后感
2015/06/11 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书