谈谈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 相关文章推荐
jquery中输入验证中一个不错的效果
Aug 21 Javascript
jQuery实现用方向键控制层的上下左右移动
Jan 13 Javascript
javascript 数组操作详解
Jan 29 Javascript
详解JavaScript对象序列化
Jan 19 Javascript
关于vue.js弹窗组件的知识点总结
Sep 11 Javascript
js实现图片切换(动画版)
Dec 25 Javascript
vue基于Element构建自定义树的示例代码
Sep 19 Javascript
详解webpack自定义loader初探
Aug 29 Javascript
Node使用Nodemailer发送邮件的方法实现
Feb 24 Javascript
简单了解Vue computed属性及watch区别
Jul 10 Javascript
微信小程序scroll-view不能左右滑动问题的解决方法
Jul 09 Javascript
JS开发前端团队展示控制器来为成员引流
Aug 14 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
PHP简介
2006/10/09 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
session 加入redis的实现代码
2016/07/15 PHP
php事件驱动化设计详解
2016/11/10 PHP
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
仅IE支持clearAttributes/mergeAttributes方法使用介绍
2012/05/04 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
极简主义法编写JavaScript类
2017/11/02 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
NodeJS实现自定义流的方法
2018/08/01 NodeJs
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
vue导入.md文件的步骤(markdown转HTML)
2020/12/31 Vue.js
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
python的Tqdm模块的使用
2018/01/10 Python
python操作oracle的完整教程分享
2018/01/30 Python
opencv python 2D直方图的示例代码
2018/07/20 Python
python 常见字符串与函数的用法详解
2018/11/23 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
资料员岗位职责
2013/11/17 职场文书
淘宝客服专员岗位职责
2014/04/11 职场文书
党员评议思想汇报
2014/10/08 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
初中军训感言
2015/08/01 职场文书
SQLServer中JSON文档型数据的查询问题解决
2021/06/27 SQL Server
Vue2.0搭建脚手架
2022/03/13 Vue.js
Redis实现一个账号只能登录一个设备
2022/04/19 Redis