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 相关文章推荐
window.parent与window.openner区别介绍
Apr 12 Javascript
ExtJS4 表格的嵌套 rowExpander应用
May 02 Javascript
浅谈JavaScript中null和undefined
Jul 09 Javascript
js console.log打印对像与数组用法详解
Jan 21 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
May 18 Javascript
微信小程序实战之上拉(分页加载)效果(2)
Apr 17 Javascript
浅谈vue+webpack项目调试方法步骤
Sep 11 Javascript
react+ant design实现Table的增、删、改的示例代码
Dec 27 Javascript
vue-router的两种模式的区别
May 30 Javascript
在vue中使用jsx语法的使用方法
Sep 30 Javascript
javascript用defineProperty实现简单的双向绑定方法
Apr 03 Javascript
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
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下通过POST还是GET来传值
2008/06/05 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
PHP数组交集的优化代码分析
2011/03/06 PHP
php中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
php实现查询百度google收录情况(示例代码)
2013/08/02 PHP
php对数组排序代码分享
2014/02/24 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
图片自动更新(说明)
2006/10/02 Javascript
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
利用javascript实现一些常用软件的下载导航
2009/08/03 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
小程序实现搜索框
2020/06/19 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
2020/06/02 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
Vue-router中hash模式与history模式的区别详解
2020/12/15 Vue.js
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
深入解答关于Python的11道基本面试题
2017/04/01 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
python脚本实现验证码识别
2018/06/07 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
Juicy Couture Beauty官方网站:香水和化妆品
2019/03/12 全球购物
Johnson Fitness澳大利亚:高级健身器材
2021/03/16 全球购物
珠宝店促销方案
2014/03/21 职场文书
学生个人自我鉴定范文
2014/03/28 职场文书
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技