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 相关文章推荐
40款非常棒的jQuery 插件和制作教程(系列一)
Oct 26 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
Apr 23 Javascript
ECMAScript中函数function类型
Jun 03 Javascript
简介JavaScript中的setDate()方法的使用
Jun 11 Javascript
JavaScript简单下拉菜单实例代码
Sep 07 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
Nov 07 Javascript
详解用vue-cli来搭建vue项目和webpack
Apr 20 Javascript
微信小程序实现多宫格抽奖活动
Apr 15 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
Apr 18 Javascript
浅谈Vue的响应式原理
May 30 Javascript
three.js如何实现3D动态文字效果
Mar 03 Javascript
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
利用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
模拟xcopy的函数
2006/10/09 PHP
一个简单的网页密码登陆php代码
2012/07/17 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
php中strtotime函数用法详解
2014/11/15 PHP
php实现可用于mysql,mssql,pg数据库操作类
2014/12/13 PHP
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
php实现学生管理系统
2020/03/21 PHP
PHP使用CURL实现下载文件功能示例
2019/06/03 PHP
JQery 渐变图片导航效果代码 漂亮
2010/01/01 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
JS自动缩小超出大小的图片
2012/10/12 Javascript
html5+javascript制作简易画板附图
2014/04/25 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
Express的路由详解
2015/12/10 Javascript
Nodejs获取网络数据并生成Excel表格
2020/03/31 NodeJs
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
2017/05/27 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
2019/05/18 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
深入理解Python装饰器
2016/07/27 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
python调用百度REST API实现语音识别
2018/08/30 Python
python模块导入的细节详解
2018/12/10 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
Python网络爬虫之爬取微博热搜
2019/04/18 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
平民服装店创业计划书
2014/01/17 职场文书
质量承诺书怎么写
2014/05/24 职场文书
护士实习自荐信
2015/03/06 职场文书