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 相关文章推荐
JS之小练习代码
Oct 12 Javascript
读jQuery之十二 删除事件核心方法
Jul 31 Javascript
纯js写的分页表格数据为json串
Feb 18 Javascript
php和js对数据库图片进行等比缩放示例
Apr 28 Javascript
再探JavaScript作用域
Sep 24 Javascript
Javascript使用SWFUpload进行多文件上传
Nov 16 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
Dec 19 Javascript
js判断PC端与移动端跳转
Dec 24 Javascript
React Native开发封装Toast与加载Loading组件示例
Sep 08 Javascript
说说如何使用Vuex进行状态管理(小结)
Apr 14 Javascript
JavaScript获取当前url路径过程解析
Dec 27 Javascript
Vue实现简单计算器案例
Feb 25 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基础学习之流程控制的实现分析
2013/04/28 PHP
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
php如何连接sql server
2015/10/16 PHP
Yii框架组件和事件行为管理详解
2016/05/20 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
jQuery遍历节点方法汇总(推荐)
2017/05/13 jQuery
微信小程序显示倒计时功能示例【测试可用】
2018/12/03 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
小程序实现左滑删除效果
2019/07/25 Javascript
vue使用@scroll监听滚动事件时,@scroll无效问题的解决方法详解
2019/10/15 Javascript
Python出现segfault错误解决方法
2016/04/16 Python
Python星号*与**用法分析
2018/02/02 Python
python3调用R的示例代码
2018/02/23 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
Python中的引用知识点总结
2019/05/20 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
META-INF文件夹中的MANIFEST.MF的作用
2016/06/21 面试题
自我评价怎么写好呢?
2013/12/05 职场文书
《我不是最弱小的》教学反思
2014/02/23 职场文书
党员公开承诺书
2014/03/25 职场文书
品酒会策划方案
2014/05/26 职场文书
创先争优活动党员公开承诺书
2014/08/29 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
浅谈Python魔法方法
2021/06/28 Java/Android
Win11开始菜单添加休眠选项
2022/04/19 数码科技