js中!和!!的区别与用法


Posted in Javascript onMay 09, 2020

js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值,

1、!可将变量转换成boolean类型,null、undefined和空字符串取反都为false,其余都为true。

!null=true
!undefined=true
!''=true
!100=false
!'abc'=false

2、!!常常用来做类型判断,在第一步!(变量)之后再做逻辑取反运算,在js中新手常常会写这样臃肿的代码:
判断变量a为非空,未定义或者非空串才能执行方法体的内容

var a;
if(a!=null&&typeof(a)!=undefined&&a!=''){
  //a有内容才执行的代码 
}

实际上我们只需要写一个判断表达:

if(!!a){
//a有内容才执行的代码... 
}

就能和上面达到同样的效果。a是有实际含义的变量才执行方法,否则变量null,undefined和''空串都不会执行以下代码。

可以总结出来,“!”是逻辑与运算,并且可以与任何变量进行逻辑与将其转化为布尔值,“!!”则是逻辑与的取反运算,尤其后者在判断类型时代码简洁高效,省去了多次判断null、undefined和空字符串的冗余代码。

下面是其他网友的补充

js 中 !!的用法

!!是将表达式强制转化为bool值的运算,运算结果为true或false,表达式是什么值,结果就是对应的bool值,不再取非。

不是取非再取非的意思!!!

!!false=false;    要注意false和“false” 的区别!!!!!

!!"false"=true;

!!true=true;

!!(NaN || undefined || null || 0 || ' ')=false;

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。

Javascript 相关文章推荐
JS input 数字验证代码
Jul 30 Javascript
能说明你的Javascript技术很烂的五个原因分析
Oct 28 Javascript
一个不错的字符串转码解码函数(自写)
Jul 31 Javascript
JavaScript对象数组的排序处理方法
Oct 21 Javascript
微信小程序 五星评分的实现实例
Aug 04 Javascript
详解React项目中碰到的IE问题
Mar 14 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
May 09 Javascript
小程序云开发教程如何使用云函数实现点赞功能
May 18 Javascript
Vue动态创建注册component的实例代码
Jun 14 Javascript
基于vue写一个全局Message组件的实现
Aug 15 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
Aug 17 Javascript
基于jQuery实现可编辑的表格
Dec 11 jQuery
JS端基于download.js实现图片、视频时直接下载而不是打开预览
May 09 #Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
May 09 #Javascript
js根据后缀判断文件文件类型的代码
May 09 #Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
May 09 #Javascript
JS原形与原型链深入详解
May 09 #Javascript
JavaScript中的this妙用实例分析
May 09 #Javascript
JavaScript中继承原理与用法实例入门
May 09 #Javascript
You might like
Terran建筑一览
2020/03/14 星际争霸
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
php中函数的形参与实参的问题说明
2010/09/01 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
xml和web特殊字符
2009/04/28 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
js实现的常用的左侧导航效果
2013/10/17 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
微信中一些常用的js方法汇总
2015/03/12 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
webpack打包js的方法
2018/03/12 Javascript
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
原生JS实现多条件筛选
2020/08/19 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
js实现验证码干扰(动态)
2021/02/23 Javascript
Python实现嵌套列表去重方法示例
2017/12/28 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
phpquery中文手册
2021/03/18 PHP
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
工程师自我评价怎么写
2013/09/19 职场文书
综合管理员岗位职责
2015/02/11 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
综合测评个人总结
2015/03/03 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript