谈谈JS中的!!


Posted in Javascript onDecember 07, 2017

!!一般用来将后面的表达式强制转换为布尔类型的数据(boolean),也就是只能是true或者false。

var a;
var b=!!a;

a默认是undefined。!a是true,!!a则是false,所以b的值是false,而不再是undefined,也非其它值,主要是为后续判断提供便利。

因为javascript是弱类型的语言(变量没有固定的数据类型)所以有时需要强制转换为相应的类型,类似的如:

a=parseInt(“1234″)
a=”1234″-0 //转换为数字
b=1234+”” //转换为字符串
c=someObject.toString() //将对象转换为字符串

其中第1种、第4种为显式转换,2、3为隐式转换

布尔型的转换,javascript约定规则为

false、undefinded、null、0、”” 为 false

true、1、”somestring”、[Object] 为 true

对null与undefined等其他用隐式转换的值,用!操作符时都会产生true的结果,所以用两个感叹号的作用就在于将这些值转换为“等价”的布尔值;

var foo;
alert(!foo);//undifined情况下,一个感叹号返回的是true;
alert(!goo);//null情况下,一个感叹号返回的也是true;
var o={flag:true};
var test=!!o.flag;//等效于var test=o.flag||false;
alert(test);

这段例子,演示了在undifined和null时,用一个感叹号返回的都是true,用两个感叹号返回的就是false,所以两个感叹号的作用就在于,如果明确设置了变量的值(非null/undifined/0/”“等值),结果就会根据变量的实际值来返回,如果没有设置,结果就会返回false。

JS中的“!!”

var o={flag:true}; 
 var test=!!o.flag;//等效于var test=o.flag||false; alert(test);

由于对null与undefined用!操作符时都会产生true的结果,

所以用两个感叹号的作用就在于,

如果明确设置了o中flag的值(非 null/undefined/0""/等值),自然test就会取跟o.flag一样的值;

如果没有设置,test就会默认为false,而不是 null或undefined。

总结

以上所述是小编给大家介绍的JS中的!!,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript 学习笔记之数据类型
Jan 14 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
Oct 28 Javascript
Angularjs 实现分页功能及示例代码
Sep 14 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
Mar 19 Javascript
js中getBoundingClientRect的作用及兼容方案详解
Feb 01 Javascript
vuejs实现折叠面板展开收缩动画效果
Sep 06 Javascript
Vue前后端不同端口的实现方法
Sep 19 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
Jul 11 jQuery
layui监听工具栏的实例(操作列表按钮)
Sep 10 Javascript
JS Thunk 函数的含义和用法实例总结
Apr 08 Javascript
javascript实现文字跑马灯效果
Jun 18 Javascript
vue路由分文件拆分管理详解
Aug 13 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
Dec 07 #Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
Dec 07 #Javascript
jquery学习笔记之无new构建详解
Dec 07 #jQuery
利用Node.js检测端口是否被占用的方法
Dec 07 #Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
Dec 07 #Javascript
Vue通过URL传参如何控制全局console.log的开关详解
Dec 07 #Javascript
Vue中添加手机验证码组件功能操作方法
Dec 07 #Javascript
You might like
php插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
2019/02/21 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
2020/09/01 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
python的keyword模块用法实例分析
2015/06/30 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
Python3爬虫带上cookie的实例代码
2020/07/28 Python
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
工商管理专业实习生自我鉴定
2013/09/29 职场文书
成品仓管员岗位职责
2013/12/11 职场文书
转预备党员政审材料
2014/02/06 职场文书
新闻发布会主持词
2014/03/28 职场文书
学校安全责任书
2014/04/14 职场文书
爱心捐书活动总结
2014/07/05 职场文书
幼儿园老师新年寄语2015
2014/12/08 职场文书
工作失误检讨书范文
2015/01/26 职场文书
怎样写辞职信
2015/02/27 职场文书
2015年质检工作总结
2015/05/04 职场文书
公司庆典主持词
2015/07/04 职场文书
公司新员工欢迎词
2015/09/30 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL