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 innerHTML、outerHTML、innerText、outerText的区别
Nov 24 Javascript
js向上无缝滚动,网站公告效果 具体代码
Nov 18 Javascript
js调用iframe实现打印页面内容的方法
Mar 04 Javascript
JavaScript的==运算详解
Jul 20 Javascript
用director.js实现前端路由使用实例
Jan 27 Javascript
js实现类bootstrap模态框动画
Feb 07 Javascript
vue2.0 axios跨域并渲染的问题解决方法
Mar 08 Javascript
JavaScript如何对图片进行黑白化
Apr 10 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
Sep 04 Javascript
js序列化和反序列化的使用讲解
Jan 19 Javascript
利用layer实现表单完美验证的方法
Sep 26 Javascript
jquery自定义组件实例详解
Dec 31 jQuery
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
SONY ICF-SW55的电路分析
2021/03/02 无线电
php模板之Phpbean的目录结构
2008/01/10 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
php中3种方法删除字符串中间的空格
2014/03/10 PHP
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
php版微信发红包接口用法示例
2016/09/23 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
window.ActiveXObject使用说明
2010/11/08 Javascript
javascript控制层显示或隐藏的方法
2015/07/22 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
2018/07/12 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
详解Vue中watch对象内属性的方法
2019/02/01 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
vue脚手架项目创建步骤详解
2021/03/02 Vue.js
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
python实现一组典型数据格式转换
2018/12/15 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
PyQt QCombobox设置行高的方法
2019/06/20 Python
Python何时应该使用Lambda函数
2019/07/02 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
Gap英国官网:Gap UK
2018/07/18 全球购物
华为python面试题
2016/05/03 面试题
可怜妈妈观后感
2015/06/09 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js