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 相关文章推荐
JS类的封装及实现代码
Dec 02 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
Dec 08 Javascript
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
Sep 28 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
May 12 Javascript
JavaScript基本语法讲解
Jun 03 Javascript
浅谈bootstrap源码分析之tab(选项卡)
Jun 06 Javascript
详谈Node.js之操作文件系统
Aug 29 Javascript
IntelliJ IDEA 安装vue开发插件的方法
Nov 21 Javascript
最实用的JS数组函数整理
Dec 05 Javascript
jquery实现楼层滚动效果
Jan 01 jQuery
vue过滤器用法实例分析
Mar 15 Javascript
JavaScript实现音乐导航效果
Nov 19 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
PHP过滤★等特殊符号的正则
2014/01/27 PHP
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
php快速查找数据库中恶意代码的方法
2015/04/01 PHP
php简单防盗链实现方法
2015/07/29 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
js getBoundingClientRect() 来获取页面元素的位置
2010/11/25 Javascript
js中获取事件对象的方法小结
2011/03/13 Javascript
杨氏矩阵查找的JS代码
2013/03/21 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
JS实现点击按钮后框架内载入不同网页的方法
2015/05/05 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
Python中的zipfile模块使用详解
2015/06/25 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
python使用Matplotlib画条形图
2020/03/25 Python
python字符串反转的四种方法详解
2019/12/02 Python
解决pycharm中导入自己写的.py函数出错问题
2020/02/12 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
仓库管理专业个人自我评价范文
2013/11/11 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL