在偶尔看源码的过程中。

看到有些判断的用法是:

var a;
if(!!a){console.log('打印')}

为什么要用两个感叹号(❕)呢?

因为js 是弱类型,单纯用一个! 感叹号去转义可能会发生不必要的错误

这是知乎上的某个比较好的总结

双感叹号才能真正的将他转换成对应的Boolean值,第一个感叹号是将其转化成Boolean类型的值,但是这一操作得到的是其取反以后的值,在进行一次取反运算才能得到其对应真正的布尔值

转换成标准的布尔类型作为判断才比较好

console.log('-----单纯判断')
console.log('{}',{},typeof {})
console.log('[]',[],typeof [])
console.log('""',"",typeof "")
console.log('NaN',NaN,typeof NaN)
console.log('undefined',undefined,typeof undefined)
console.log('null',null,typeof null)
console.log('0',0,typeof 0)
console.log('-----单感叹号')console.log('!{}',!{},typeof !{})
console.log('![]',![],typeof ![])
console.log('!""',!"",typeof !"")
console.log('!NaN',!NaN,typeof !NaN)
console.log('!undefined',!undefined,typeof !undefined)
console.log('!null',!null,typeof !null)
console.log('!0',!0,typeof !0)
console.log('-----双感叹号')console.log('!!{}',!!{},typeof !!{})
console.log('!![]',!![],typeof !![])
console.log('!!""',!!"",typeof !!"")
console.log('!!NaN',!!NaN,typeof !!NaN)
console.log('!!undefined',!!undefined,typeof !!undefined)
console.log('!!null',!!null,typeof !!null)
console.log('!!0',!!0,typeof !!0)

这里是我作的简单分析,只是并没看出太大的区别。

因为本身双感叹号就是完全把本身的字段转换成布尔类型,所以判断会舒服一些。

javaScript 双感叹号用法相关推荐

  1. nodejs双感叹号用法

    根本目的是把undefine.null等值顺便转换为boolean类型.因为取反的过程中会自动给它们进行类型转换 . 当值是非空字符串和非零数字返回true,当值是空字符串.0或者null返回fals ...

  2. Javascript中!!(两个感叹号,双感叹号)的含义

    使用Javascript时,有时会在变量前面加上两个感叹号,这样做表示什么含义呢?Javascript中,!表示运算符"非",如果变量不是布尔类型,会将变量自动转化为布尔类型,再取 ...

  3. javascript中双感叹号(!!)作用

    作为一个前端,在开发过程中经常会遇到!!(双感叹号),那么!!究竟有何含义,以下做详细说明,并罗列了js各数据类型使用后(不含symbol)输出结果(小白可以参照): javascript中'!'是& ...

  4. 【JS】单感叹号 和 双感叹号 的用法

    文章目录 用法 示例 用法 双感叹号!!可以将一个值转换成对应的Boolean值, 第一个感叹号!是将其转化成取反后的Boolean类型的值 第二个感叹号!!是将取反后的Boolean类型的值再进行一 ...

  5. Kotlin 3. Kotlin 特殊符号的用法:双感叹号!!,问号?,双冒号::

    一起来学Kotlin:概念:3. Kotlin 特殊符号的用法:双感叹号!!,问号?,双冒号:: 这里介绍 Kotlin 特殊符号的用法,包括:双感叹号!!,问号?,双冒号::. 文章目录 一起来学K ...

  6. javascript中in用法介绍

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. js replace不改变原str_总结javascript replace高级用法

    详解javascript replace高级用法 在前端与后台交互的时候我们通常都需要将后台传递的数据绑定到html中,这个绑定数据的方式我们通常是使用jQuery或者使用原生的innerHTML进行 ...

  8. Javascript的this用法

    Javascript的this用法 转自:http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html th ...

  9. JavaScript中foreach()用法及使用的坑

    JavaScript中foreach()用法及使用的坑 JavaScript中foreach是用于遍历数组的方法,将遍历到的元素传递给回调函数,遍历的数组不能是空的要有值. foreach 语法: [ ...

最新文章

  1. 2019 快过去了,自动驾驶发展得怎么样了?
  2. 踩坑子Module引用aar
  3. 如何转载别人的CSDN文章
  4. mpi tcp连接报错_关于WinCC与真实PLC之间的TCP/IP连接问题-工业支持中心-西门子中国...
  5. Oracle入门(五C)之68个系统变量的key和默认value
  6. 实践解析丨Rust 内置 trait:PartialEq 和 Eq
  7. (33)Verilog HDL缩减运算
  8. Linux学习-Linux 主机上的用户讯息传递
  9. Latex中参考文献排序
  10. java.lang.ClassNotFoundException: javax.servlet.SessionCookieConfig
  11. java 分布式同步锁_java编程进阶之路:回归锁的本质,探索分布式锁之源头
  12. 非线性控制4——李雅普诺夫稳定性理论
  13. SQL SERVER 2005下载(本地使用)
  14. 陪你看这世间---识人术
  15. Win10更新后桌面右键反应慢的问题
  16. 土木/岩土期刊版面费/审稿费统计列表
  17. openjudge7939_膨胀的木棍
  18. android平板值得买吗,最值得买大推荐 全新安卓平板你选谁?
  19. 因为文件目录存在空格导致kafka运行错误:提示找不到或者无法加载主类错误
  20. 基础拓扑学笔记(2)——拓扑不变量

热门文章

  1. php婚礼请帖,结婚请柬上的浪漫句子 婚礼请帖唯美的句子
  2. 计算机屏幕上的框的英语,电脑打开steam平台弹出一个英文框的解决方法
  3. SD卡数据读取Altium Designer下载
  4. 10.Volumetric Shaders
  5. 红薯淀粉加工设备行业分析
  6. linux oracle lrm00109,oracle11g ORA-01078 LRM-00109 ORA-12505 错误
  7. 1-铰链四杆机构仿真分析
  8. 创意时间轴系列图表(时间轴 时间线 里程碑 历史足迹 大事记)
  9. jQuery如何动态设置iframe的src属性
  10. python键盘模拟器 pyautogui