JavaScript中双叹号(!!)作用示例介绍


Posted in Javascript onApril 10, 2014

经常看到这样的例子:

var a; 
var b=!!a;

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

!!一般用来将后面的表达式强制转换为布尔类型的数据(boolean),也就是只能是true或者false;
因为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。
Javascript 相关文章推荐
JavaScript的Cookies
Jan 16 Javascript
js+html+css实现鼠标移动div实例
Jan 30 Javascript
javascript和jquery修改a标签的href属性
Dec 16 Javascript
微信小程序 自己制作小组件实例详解
Dec 22 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
Feb 13 Javascript
Mac系统下Webstorm快捷键整理大全
May 28 Javascript
基于jQuery ztree实现表格风格的树状结构
Aug 31 jQuery
详解ES6 系列之异步处理实战
Oct 26 Javascript
vue实现分页组件
Jun 16 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
Jul 11 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
Jul 24 Javascript
Vue2.0 $set()的正确使用详解
Jul 28 Javascript
js实现图片旋转的三种方法
Apr 10 #Javascript
javascript:void(0)的问题使用探讨
Apr 10 #Javascript
ajax请求乱码的解决方法(中文乱码)
Apr 10 #Javascript
php的文件上传入门教程(实例讲解)
Apr 10 #Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
Apr 10 #Javascript
javascript的propertyIsEnumerable()方法使用介绍
Apr 09 #Javascript
常见的原始JS选择器使用方法总结
Apr 09 #Javascript
You might like
深入Nginx + PHP 缓存详解
2013/07/11 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
thinkPHP5.0框架命名空间详解
2017/03/18 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
2018/12/05 PHP
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
jquery禁用右键示例
2014/04/28 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
javascript从作用域链谈闭包
2020/07/29 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
微信小程序Echarts图表组件使用方法详解
2019/06/25 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
详解使用mocha对webpack打包的项目进行"冒烟测试"的大致流程
2020/04/27 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
Django 反向生成url实例详解
2019/07/30 Python
Python闭包及装饰器运行原理解析
2020/06/17 Python
Django实现简单的分页功能
2021/02/22 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
物业公司的岗位任命书
2014/06/06 职场文书
励志演讲稿300字
2014/08/21 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
史上最牛的辞职信
2015/02/28 职场文书
2015年招生工作总结
2015/05/04 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书
详解redis在微服务领域的贡献
2021/10/16 Redis