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 相关文章推荐
javascript知识点收藏
Feb 22 Javascript
按钮JS复制文本框和表格的代码
Apr 01 Javascript
利用谷歌地图API获取点与点的距离的js代码
Oct 11 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
Apr 08 Javascript
Javascript函数式编程简单介绍
Oct 11 Javascript
Bootstrap基本组件学习笔记之导航(10)
Dec 07 Javascript
详解使用webpack打包编写一个vue-toast插件
Nov 08 Javascript
webpack写jquery插件的环境配置
Dec 21 jQuery
Vue验证码60秒倒计时功能简单实例代码
Jun 22 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
Nov 10 Javascript
jQuery实现简易聊天框
Feb 08 jQuery
js实现飞机大战游戏
Aug 26 Javascript
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
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
Express系列之multer上传的使用
2017/10/27 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
2018/07/10 Javascript
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
详解webpack-dev-middleware 源码解读
2020/03/23 Javascript
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
tornado 多进程模式解析
2018/01/15 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
余弦相似性计算及python代码实现过程解析
2019/09/18 Python
在OpenCV里使用Camshift算法的实现
2019/11/22 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
用pushplus+python监控亚马逊到货动态推送微信
2021/01/29 Python
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
传播学专业毕业生自荐信
2013/11/04 职场文书
体育教师求职信
2014/05/24 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书