谈谈JS中的!!


Posted in Javascript onDecember 07, 2017

!!一般用来将后面的表达式强制转换为布尔类型的数据(boolean),也就是只能是true或者false。

var a;
var b=!!a;

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

因为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。

JS中的“!!”

var o={flag:true}; 
 var test=!!o.flag;//等效于var test=o.flag||false; alert(test);

由于对null与undefined用!操作符时都会产生true的结果,

所以用两个感叹号的作用就在于,

如果明确设置了o中flag的值(非 null/undefined/0""/等值),自然test就会取跟o.flag一样的值;

如果没有设置,test就会默认为false,而不是 null或undefined。

总结

以上所述是小编给大家介绍的JS中的!!,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
最新优化收藏到网摘代码(digg,diigo)
Feb 07 Javascript
js 页面执行时间计算代码
Mar 04 Javascript
疯狂Jquery第一天(Jquery学习笔记)
May 11 Javascript
Js nodeType 属性全面解析
Nov 14 Javascript
使用js完成节点的增删改复制等的操作
Jan 02 Javascript
Javascript图片上传前的本地预览实例
Jun 16 Javascript
jquery列表拖动排列(由项目提取相当好用)
Jun 17 Javascript
Javascript基础教程之argument 详解
Jan 18 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
Apr 27 Javascript
JavaScript实现与使用发布/订阅模式详解
Jan 19 Javascript
vue中对象数组去重的实现
Feb 06 Javascript
js实现车辆管理系统
Aug 26 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
Dec 07 #Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
Dec 07 #Javascript
jquery学习笔记之无new构建详解
Dec 07 #jQuery
利用Node.js检测端口是否被占用的方法
Dec 07 #Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
Dec 07 #Javascript
Vue通过URL传参如何控制全局console.log的开关详解
Dec 07 #Javascript
Vue中添加手机验证码组件功能操作方法
Dec 07 #Javascript
You might like
上海地方志办公室-上海电子仪表工业志
2021/03/04 无线电
最新的php 文件上传模型,支持多文件上传
2009/08/13 PHP
php学习之数据类型之间的转换代码
2011/05/29 PHP
深入探讨PHP中的内存管理问题
2011/08/31 PHP
PHP系列学习之日期函数使用介绍
2012/08/18 PHP
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
使用配置类定义Codeigniter全局变量
2014/06/12 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
javascript进行数组追加方法小结
2014/06/16 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
angular 服务随记小结
2019/05/06 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
Python中的模块和包概念介绍
2015/04/13 Python
Django原生sql也能使用Paginator分页的示例代码
2017/11/15 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
call在Python中改进数列的实例讲解
2020/12/09 Python
利用简洁的图片预加载组件提升html5移动页面的用户体验
2016/03/11 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
你对IPv6了解程度
2016/02/09 面试题
Java面试笔试题大全
2016/11/23 面试题
初一家长会邀请函
2014/01/31 职场文书
捐款仪式主持词
2015/07/04 职场文书
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB