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 相关文章推荐
如何在Web页面上直接打开、编辑、创建Office文档
Mar 12 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
Jun 06 Javascript
文档对象模型DOM通俗讲解
Nov 01 Javascript
js校验表单后提交表单的三种方法总结
Feb 28 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
Jun 03 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
Apr 25 Javascript
jQuery判断checkbox选中状态
May 12 Javascript
javascript删除html标签函数cIsHTML
Jan 09 Javascript
React-router中结合webpack实现按需加载实例
May 25 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
Mar 06 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
Jun 17 Javascript
微信小程序自定义顶部组件customHeader的示例代码
Jun 03 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在Web开发领域的优势
2006/10/09 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
Mootools 1.2教程 Tooltips
2009/09/15 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
2013/05/17 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
最全的Javascript编码规范(推荐)
2016/06/22 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
Angular中的$watch方法详解
2017/09/18 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
2020/11/12 Javascript
vue中利用three.js实现全景图的完整示例
2020/12/07 Vue.js
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
详解Python3中的Sequence type的使用
2015/08/01 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
python pandas库的安装和创建
2019/01/10 Python
python字典setdefault方法和get方法使用实例
2019/12/25 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
2020/01/18 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
深入浅析HTML5中的SVG
2015/11/27 HTML / CSS
外贸英语毕业生自荐信
2013/11/14 职场文书
上课玩手机检讨书
2014/02/08 职场文书
市场部岗位职责
2015/02/12 职场文书
2016继续教育培训学习心得体会
2016/01/19 职场文书
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android