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中的私有/静态属性介绍
Jul 26 Javascript
干货分享:让你分分钟学会javascript闭包
Dec 25 Javascript
分享jQuery网页元素拖拽插件
Dec 01 Javascript
JavaScript中const、var和let区别浅析
Oct 11 Javascript
js浏览器html5表单验证
Oct 17 Javascript
Angular通过angular-cli来搭建web前端项目的方法
Jul 27 Javascript
Three.js利用dat.GUI如何简化试验流程详解
Sep 26 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
Nov 10 jQuery
Vue.js实现的表格增加删除demo示例
May 22 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
Sep 22 Javascript
JavaScript实现随机五位数验证码
Sep 27 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
Aug 06 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/04/10 PHP
PHP获取数组最后一个值的2种方法
2015/01/21 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
jQuery链式操作实例分析
2015/11/16 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
2018/09/26 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
JS 数组基本用法入门示例解析
2020/01/16 Javascript
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
浅析PyTorch中nn.Linear的使用
2019/08/18 Python
python 项目目录结构设置
2020/02/14 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
阿迪达斯德国官方网站:adidas德国
2017/07/12 全球购物
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
写好自荐信的要点
2013/11/06 职场文书
爱祖国演讲稿
2014/05/04 职场文书
环保口号大全
2014/06/12 职场文书
出纳岗位职责范本
2015/03/31 职场文书
研究生毕业登记表的自我鉴定范文
2019/07/15 职场文书
dubbo服务整合zipkin详解
2021/07/26 Java/Android
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers