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 Range HTML文档/文字内容选中、库及应用介绍
May 12 Javascript
jQuery 源码分析笔记(6) jQuery.data
Jun 08 Javascript
jQuery实现视频作为全屏幕背景
Dec 18 Javascript
JavaScript中函数(Function)的apply与call理解
Jul 08 Javascript
jQuery插件 Jqplot图表实例
Jun 18 Javascript
Angular工具方法学习
Dec 26 Javascript
React Native中TabBarIOS的简单使用方法示例
Oct 13 Javascript
微信小程序实现收藏与取消收藏切换图片功能
Aug 03 Javascript
JS数组去重的6种方法完整实例
Dec 08 Javascript
js实现指定时间倒计时效果
Aug 26 Javascript
微信小程序实现watch监听
Jun 04 Javascript
Ajax是什么?Ajax高级用法之Axios技术
Apr 21 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
Django 中 cookie的使用
2017/08/17 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
AngularJS国际化详解及示例代码
2016/08/18 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
vue2.X组件学习心得(新手必看篇)
2017/07/05 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
vue spa应用中的路由缓存问题与解决方案
2019/05/31 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
python概率计算器实例分析
2015/03/25 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
Python+pandas计算数据相关系数的实例
2018/07/03 Python
python梯度下降法的简单示例
2018/08/31 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
python如何调用php文件中的函数详解
2020/12/29 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
canvas绘制圆角头像的实现方法
2019/01/17 HTML / CSS
函授本科毕业自我鉴定
2013/10/09 职场文书
敬老文明号事迹材料
2014/01/16 职场文书
计算机学生的自我评价分享
2014/02/18 职场文书
鸿星尔克广告词
2014/03/21 职场文书
廉洁校园实施方案
2014/05/25 职场文书
体育馆的标语
2014/06/24 职场文书
公司催款律师函
2015/05/27 职场文书
nginx配置proxy_pass中url末尾带/与不带/的区别详解
2021/03/31 Servers
利用javaScript处理常用事件详解
2021/04/14 Javascript
手写Spirit防抖函数underscore和节流函数lodash
2022/03/22 Javascript