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函数般调用正则
Apr 08 Javascript
ASP 过滤数组重复数据函数(加强版)
May 31 Javascript
CheckBoxList多选样式jquery、C#获取选择项
Sep 06 Javascript
从js向Action传中文参数出现乱码问题的解决方法
Dec 29 Javascript
jQuery中:not选择器用法实例
Dec 30 Javascript
JavaScript去除数组里重复值的方法
Jul 13 Javascript
JS排序之快速排序详解
Apr 08 Javascript
vue二级菜单导航点击选中事件的方法
Sep 12 Javascript
layui实现数据表格table分页功能(ajax异步)
Jul 27 Javascript
Node绑定全局TraceID的实现方法
Nov 14 Javascript
详细聊聊浏览器是如何看闭包的
Nov 11 Javascript
TypeScript 使用 Tuple Union 声明函数重载
Apr 07 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中一个控制字符串输出的函数
2006/10/09 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
跟我学Laravel之安装Laravel
2014/10/15 PHP
discuz图片顺序混乱解决方案
2015/07/29 PHP
PHP上传文件参考配置大文件上传
2015/12/16 PHP
php微信开发之带参数二维码的使用
2016/08/03 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
JQuery控制图片由中心点逐渐放大效果
2016/06/26 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
2019/04/17 Javascript
vue 强制组件重新渲染(重置)的两种方案
2019/10/29 Javascript
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
推荐信模板
2014/05/09 职场文书
省级优秀班集体申报材料
2014/05/25 职场文书
应届毕业生求职信
2014/05/26 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
2014年业务工作总结
2014/11/17 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
归元寺导游词
2015/02/06 职场文书
房屋维修申请报告
2015/05/18 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers