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 写的一个简单的timer
Jul 30 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
Jul 10 Javascript
JavaScript 产生不重复的随机数三种实现思路
Dec 13 Javascript
Javascript中replace()小结
Sep 30 Javascript
JQuery Mobile 弹出式登录框的实现方法
May 28 Javascript
jQuery实现背景弹性滚动的导航效果
Jun 01 Javascript
JS获取checkbox的个数简单实例
Aug 19 Javascript
BootStrap树状图显示功能
Nov 24 Javascript
详解js数组的完全随机排列算法
Dec 16 Javascript
详谈JS中数组的迭代方法和归并方法
Aug 11 Javascript
Postman模拟发送带token的请求方法
Mar 31 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
Sep 03 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
php include的妙用,实现路径加密
2008/07/29 PHP
PHP+MYSQL 出现乱码的解决方法
2008/08/08 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
JavaScript 开发中规范性的一点感想
2009/06/23 Javascript
js取float型小数点后两位数的方法
2014/01/18 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
vue使用i18n实现国际化的方法详解
2019/09/05 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
2020/08/19 Javascript
python实现异步回调机制代码分享
2014/01/10 Python
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
python基础教程之五种数据类型详解
2017/01/12 Python
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
门卫岗位安全职责
2013/12/13 职场文书
搞笑婚礼主持词
2014/03/13 职场文书
母亲节演讲稿
2014/05/27 职场文书
市场调研项目授权委托书范本
2014/10/04 职场文书
欢迎家长标语
2014/10/08 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
2015医德医风个人工作总结
2015/04/02 职场文书
歼十出击观后感
2015/06/11 职场文书
《灰雀》教学反思
2016/02/19 职场文书
python 进阶学习之python装饰器小结
2021/09/04 Python