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据option的value值快速设定初始的selected选项
Aug 13 Javascript
为指定元素增加样式的js代码
Dec 09 Javascript
jQuery下通过$.browser来判断浏览器.
Apr 05 Javascript
JQuery拖拽元素改变大小尺寸实现代码
Dec 10 Javascript
jquery操作checkbox实现全选和取消全选
May 02 Javascript
简介alert()与console.log()的不同
Aug 26 Javascript
H5用户注册表单页 注册模态框!
Sep 17 Javascript
PHP实现本地图片上传和验证功能
Feb 27 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
Jan 11 Javascript
微信jssdk逻辑在vue中的运用详解
Nov 14 Javascript
Vue事件修饰符native、self示例详解
Jul 09 Javascript
基于canvasJS在PHP中制作动态图表
May 30 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实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
实例讲解PHP表单处理
2019/02/15 PHP
Javascript日期对象的dateAdd与dateDiff方法
2008/11/18 Javascript
讨论javascript(一)工厂方式 js面象对象的定义方法
2009/12/15 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
2013/11/06 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
node.js中的require使用详解
2014/12/15 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
在Python中如何传递任意数量的实参的示例代码
2019/03/21 Python
详解python-图像处理(映射变换)
2019/03/22 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
使用Python测试Ping主机IP和某端口是否开放的实例
2019/12/17 Python
Python持续监听文件变化代码实例
2020/07/22 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
python 写一个水果忍者游戏
2021/01/13 Python
品管员岗位职责
2013/11/10 职场文书
关于迟到的检讨书
2014/01/26 职场文书
出纳试用期自我鉴定
2014/04/07 职场文书
酒店员工培训方案
2014/06/02 职场文书
综艺节目策划方案
2014/06/13 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
PHP解决高并发问题
2021/04/01 PHP
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫