谈谈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 相关文章推荐
JS 动态加载脚本的4种方法
May 05 Javascript
Draggable Elements 元素拖拽功能实现代码
Mar 30 Javascript
JS截取url中问号后面参数的值信息
Apr 29 Javascript
Javascript判断文件是否存在(客户端/服务器端)
Sep 16 Javascript
js实现简单锁屏功能实例
May 27 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
May 05 Javascript
BootStrap下jQuery自动完成的样式调整
May 30 Javascript
javascript类型系统——undefined和null全面了解
Jul 13 Javascript
JS和canvas实现俄罗斯方块
Mar 14 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
Sep 29 Javascript
JavaScript之数组扁平化详解
Jun 03 Javascript
微信小程序实现锚点跳转
Nov 23 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
PHPShop存在多个安全漏洞
2006/10/09 PHP
动易数据转成dedecms的php程序
2007/04/07 PHP
PHP修改session_id示例代码
2014/01/08 PHP
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
javascript实现颜色渐变的方法
2013/10/30 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
webpack4打包vue前端多页面项目
2018/09/17 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
Vue数据双向绑定底层实现原理
2019/11/22 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
JS实现音量控制拖动
2020/01/15 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
详解python单例模式与metaclass
2016/01/15 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
python 中如何获取列表的索引
2019/07/02 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
Python测试线程应用程序过程解析
2019/12/31 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
基于python实现图片转字符画代码实例
2020/09/04 Python
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
如何利用cmp命令比较文件
2016/04/11 面试题
小学校本培训方案
2014/06/06 职场文书
顶岗实习协议书
2015/01/29 职场文书
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
zabbix监控mysql的实例方法
2021/06/02 MySQL
JavaScript实例 ODO List分析
2022/01/22 Javascript