谈谈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 相关文章推荐
jquery插件jquery倒计时插件分享
Dec 27 Javascript
js实现的点击数量加一可操作数据库
May 09 Javascript
Javascript编程中几种继承方式比较分析
Nov 28 Javascript
vue,angular,avalon这三种MVVM框架优缺点
Apr 27 Javascript
JS对HTML表格进行增删改操作
Aug 22 Javascript
bootstrap table实例详解
Jan 06 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
Dec 19 Javascript
原生JavaScript实现remove()和recover()功能示例
Jul 24 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
Sep 18 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
Nov 19 Javascript
ES6 迭代器与可迭代对象的实现
Feb 11 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
Nov 11 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中DOMElement操作xml文档实例演示
2013/03/26 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
Javascript valueOf 使用方法
2008/12/28 Javascript
javascript OFFICE控件测试代码
2009/12/08 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
Javascript selection的兼容性写法介绍
2013/12/20 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
js实现div弹出层的方法
2014/11/20 Javascript
推荐25个超炫的jQuery网格插件
2014/11/28 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
js数组去重的方法总结
2019/01/18 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
微信小程序常用简易小函数总结
2019/02/01 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
vue-router路由模式详解(小结)
2019/08/26 Javascript
jQuery实现简单日历效果
2020/07/05 jQuery
Python实现购物系统(示例讲解)
2017/09/13 Python
python+opencv实现摄像头调用的方法
2019/06/22 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
Python TCP通信客户端服务端代码实例
2019/11/21 Python
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
分别介绍一下Session Bean和Entity Bean
2015/03/13 面试题
大学学习生活感言
2014/01/18 职场文书
推广普通话标语
2014/06/27 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
办理收楼委托书范本
2014/10/09 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
java解析XML详解
2021/07/09 Java/Android
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android
分享很少见很有用的SQL功能CORRESPONDING
2022/08/05 MySQL