js中!和!!的区别及用法

js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值,
1、!可将变量转换成boolean类型,null、undefined和空字符串取反都为false,其余都为true。

1 !null=true
2
3 !undefined=true
4
5 !''=true
6
7 !100=false
8
9 !'abc'=false

2、!!常常用来做类型判断,在第一步!(变量)之后再做逻辑取反运算,在js中新手常常会写这样臃肿的代码:
判断变量a为非空,未定义或者非空串才能执行方法体的内容

var a;
if(a!=null&&typeof(a)!=undefined&&a!=''){//a有内容才执行的代码
}

实际上我们只需要写一个判断表达:

if(!!a){//a有内容才执行的代码...
}

就能和上面达到同样的效果。a是有实际含义的变量才执行方法,否则变量null,undefined和''空串都不会执行以下代码。

可以总结出来,“!”是逻辑与运算,并且可以与任何变量进行逻辑与将其转化为布尔值,“!!”则是逻辑与的取反运算,尤其后者在判断类型时代码简洁高效,省去了多次判断null、undefined和空字符串的冗余代码。

3、三个感叹号

三个感叹号没有什么意义,和一个感叹号的效果是一样的。一般他们认为!!表示将一个变量转为boolean型,再加一个!是对boolean型取反,和!false或者!true一样。

js中!和!!的区别及用法相关推荐

  1. js中继承的几种用法总结(apply,call,prototype)

    本篇文章主要介绍了js中继承的几种用法总结(apply,call,prototype) 需要的朋友可以过来参考下,希望对大家有所帮助 一,js中对象继承 js中有三种继承方式 1.js原型(proto ...

  2. 第22篇 js中的this指针的用法

    前面把js的相关知识总结了下,今天把js中的上下文的this,对于强类型语言,this的用法非常的单一,因为他们没有js特有的动态绑定. 首先看下面代码: function funcA() {this ...

  3. js中try和catch的用法

    js中try和catch的用法 版权声明:本文为@lyhh5原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明 原文链接:https://blog.csdn.net/l ...

  4. JS中 ?? 与 || 的区别

    JavaScript 中 ?? 与 || 的区别 相同点 用法相同,都是前后是值,中间用符号连接.根据前面的值来判断最终返回前面的值还是后面的值. 值1 ?? 值2 值1 || 值2 不同点 判断方式 ...

  5. JS中break和continue的用法

    break和continue的用法 Break--跳出循环.判断,用于判断或循环语句中 Continue--跳出本次循环,只能用于循环语句中. 区分是否为自定义标识符,其后加冒号,为自定义标识符. B ...

  6. js中innerHTML与innerText的用法与区别【转自http://blog.sina.com.cn/johnpu】

    用法:SupeSite/X-Space官方站%x-ZP$k?'DWZ_{ SupeSite/X-Space官方站K?_/T9s3^QJ a4X <div id="test"& ...

  7. js 中null,undefined区别

    首先摘自阮一峰先生的文章: 大多数计算机语言,有且仅有一个表示"无"的值,比如,C语言的NULL,Java语言的null,Python语言的None,Ruby语言的nil. 有点奇 ...

  8. js取服务器系统时间,JS中new Date()用法及获取服务器时间

    1.获取服务器时间: var now = new Date($.ajax({async: false}).getResponseHeader("Date")); 2.new Dat ...

  9. js中动态函数的一些用法尝试

    在js中,经常会使用到函数,普通函数虽然很方便,但是,形式略显复杂,特别是代码量大的时候,这时,我们可以使用动态函数,动态函数形式比较简洁,并且比普通函数表达式更灵活,其结构如下: var fun_n ...

最新文章

  1. 机器学习的基础图表!
  2. pandas dataframe与series
  3. mysql中的执行计划_MySQL中的执行计划explain详解
  4. 蓝松短视频经验分享----抠图和动画设计
  5. 人人网的系统架构 网上搜集
  6. JSTL-EL表达式
  7. gifcam使用缩小内存_Fedora 上的桌面环境内存占用测试 | Linux 中国
  8. cookie 和 token 都存放在 header 中,为什么不会劫持 token?____token和cookie的区别
  9. elipse+pydev+python开发arcgis脚本程序
  10. Nodejs事件循环
  11. ubuntu下装java
  12. Apache 虚拟主机
  13. React 小案例 路由跳转
  14. ip模拟工具modify headers
  15. 数字化生产车间可视化管理——电子看板
  16. php 修改图像大小,如何改变图片大小
  17. linux 怎么烧录光盘,Linux下的光盘烧录工具brasero
  18. h5前端开发培训,html5学习笔记
  19. CRUD的意思???
  20. 互联网创业的准备——架构

热门文章

  1. Android中的数据传递之Parcelable接口
  2. (二)OpenStack---M版---双节点搭建---数据库安装和配置
  3. php自定义扩展函数,Laravel框架中扩展函数、扩展自定义类的方法
  4. MaximumGap的思想
  5. java 内部类泛型,java – 使用泛型强制转换为内部类
  6. idea配置jfinal_intellij idea安装与配置(Java开发配置篇)
  7. 和php工具箱一样的,将php工具箱或其它类似工具正确安装好,并写出安装步骤与注意事项...
  8. build.xml java打包_配置pom.xml用maven打包java工程的方法(推荐)
  9. 我的世界服务器伤害增加bug,我的世界服务器BUG解决办法大全
  10. 如何防范SpringBoot 相关漏洞?