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 相关文章推荐
ajax提交表单实现网页无刷新注册示例
May 08 Javascript
基于javascript的COOkie的操作实现只能点一次
Dec 26 Javascript
JavaScript原生对象之String对象的属性和方法详解
Mar 13 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
Nov 17 Javascript
js实现异步循环实现代码
Feb 16 Javascript
详解jQuery插件开发方式
Nov 22 Javascript
微信小程序  wx.request合法域名配置详解
Nov 23 Javascript
AngularJS日程表案例详解
Aug 15 Javascript
vue 中directive功能的简单实现
Jan 05 Javascript
js get和post请求实现代码解析
Feb 06 Javascript
Vue切换div显示隐藏,多选,单选代码解析
Jul 14 Javascript
js之ajax文件上传
May 13 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 全局变量范围分析
2009/08/07 PHP
通过具体程序来理解PHP里面的抽象类
2010/01/28 PHP
php获取post中的json数据的实现方法
2011/06/08 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
JS代码同步文本框内容的实例方法
2013/07/12 Javascript
JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
2015/10/10 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
2018/02/26 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
HEMA英国:荷兰原创设计
2018/08/28 全球购物
全陪导游欢迎词
2014/01/17 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
推荐信怎么写
2014/05/09 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
庆元旦演讲稿
2014/09/15 职场文书
管理人员岗位职责
2015/02/14 职场文书
开学第一周值周总结
2015/07/16 职场文书
公司团队口号霸气押韵
2015/12/24 职场文书
家访教师心得体会
2016/01/23 职场文书
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL
sql注入报错之注入原理实例解析
2022/06/10 MySQL
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL