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 相关文章推荐
xtree.js 代码
Mar 13 Javascript
加速IE的Javascript document输出的方法
Dec 02 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
Feb 05 Javascript
jQuery标签编辑插件Tagit使用指南
Apr 21 Javascript
探讨JavaScript标签位置的存放与功能有无关系
Jan 15 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
Mar 30 Javascript
浅谈js算法和流程控制
Dec 29 Javascript
javascript 面向对象function详解及实例代码
Feb 28 Javascript
微信小程序上传图片到服务器实例代码
Nov 07 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
May 09 Javascript
vue打包之后生成一个配置文件修改接口的方法
Dec 09 Javascript
微信小程序实现音频文件播放进度的实例代码
Mar 02 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上传文件的增强函数
2010/07/21 PHP
PHP校验ISBN码的函数代码
2011/01/17 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
2013/12/25 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
PHP反射实际应用示例
2019/04/03 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
JavaScript中的时间处理小结
2016/02/24 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
详解在 Angular 项目中添加 clean-blog 模板
2017/07/04 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
详解Python3 基本数据类型
2019/04/19 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
Python pandas RFM模型应用实例详解
2019/11/20 Python
PyTorch中permute的用法详解
2019/12/30 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
外企财务年会演讲稿
2014/01/03 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
公司内部升职自荐信
2015/03/27 职场文书
公司借款担保书
2015/09/22 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
python 下载文件的几种方式分享
2021/04/07 Python