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 setTimeout和setInterval 的区别
Dec 08 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
Dec 23 Javascript
js自动查找select下拉的菜单并选择(示例代码)
Feb 26 Javascript
jquery中EasyUI实现同步树
Mar 01 Javascript
JavaScript深度复制(deep clone)的实现方法
Feb 19 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
Dec 19 Javascript
Angular1.x自定义指令实例详解
Mar 01 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
Feb 24 Javascript
vue 开发一个按钮组件的示例代码
Mar 27 Javascript
vue中动态设置meta标签和title标签的方法
Jul 11 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
Jul 13 Javascript
有趣的JavaScript隐式类型转换操作实例分析
May 02 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
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
php四种定界符详解
2017/02/16 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
2019/04/12 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
利用python list完成最简单的DB连接池方法
2019/08/09 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
python def 定义函数,调用函数方式
2020/06/02 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
python中添加模块导入路径的方法
2021/02/03 Python
Python与C/C++的相互调用案例
2021/03/04 Python
潘多拉珠宝美国官方网站:Pandora US
2020/06/18 全球购物
水产养殖学应届生求职信
2013/09/29 职场文书
高中的自我鉴定
2013/12/16 职场文书
4s店机修工岗位职责
2013/12/20 职场文书
通信工程求职信
2014/07/16 职场文书
师德师风整改措施
2014/10/24 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
Python必备技巧之函数的使用详解
2022/04/04 Python