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 var变量隐式声明方法
Oct 19 Javascript
javascript 动态设置已知select的option的value值的代码
Dec 16 Javascript
js变换显示图片的实例
Apr 16 Javascript
js判断是否按下了Shift键的方法
Jan 27 Javascript
跟我学习javascript的闭包
Nov 16 Javascript
对javascript继承的理解
Oct 11 Javascript
JS 循环li添加点击事件 (闭包的应用)
Dec 10 Javascript
JavaScript 自定义事件之我见
Sep 25 Javascript
node.js中axios使用心得总结
Nov 29 Javascript
js设计模式之单例模式原理与用法详解
Aug 15 Javascript
js 实现 list转换成tree的方法示例(数组到树)
Aug 18 Javascript
vue之封装多个组件调用同一接口的案例
Aug 11 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
PHP设计模式之装饰者模式
2012/02/29 PHP
基于php伪静态的实现详细介绍
2013/04/28 PHP
php 实现Hash表功能实例详解
2016/11/29 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
Javascript & DHTML 实例编程(教程)基础知识
2007/06/02 Javascript
JQury slideToggle闪烁问题及解决办法
2011/07/05 Javascript
Lazy Load 延迟加载图片的jQuery插件中文使用文档
2012/10/18 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
Javascript复制实例详解
2016/01/28 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
详解Vue中添加过渡效果
2017/03/20 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
vuejs router history 配置到iis的方法
2018/09/20 Javascript
Layui动态生成select下拉选择框不显示的解决方法
2019/09/24 Javascript
Vue.directive 实现元素scroll逻辑复用
2019/11/29 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
Python实现的彩票机选器实例
2015/06/17 Python
Python网络爬虫项目:内容提取器的定义
2016/10/25 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
python shell根据ip获取主机名代码示例
2017/11/25 Python
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
便利店投资创业计划书
2014/02/08 职场文书
职工趣味运动会方案
2014/02/10 职场文书
大学生自我评价范文
2015/03/03 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
小学德育工作总结2015
2015/05/12 职场文书
入党积极分子培养联系人意见
2015/08/12 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
分析设计模式之模板方法Java实现
2021/06/23 Java/Android
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python