在javascript中有时会看到有两个!!的用法

  1. var foo;
  2. alert(!foo);//undifined情况下,一个感叹号返回的是true;
  3. alert(!goo);//null情况下,一个感叹号返回的也是true;
  4. var o={flag:true};
  5. var test=!!o.flag;//等效于var test=o.flag||false;
  6. alert(test);

这段例子,演示了在undifined和null时,用一个感叹号返回的都是true,用两个感叹号返回的就是false,所以两个感叹号的作用就在于,如果明确设置了变量的值(非null/undifined/0/""等值),结果就会根据变量的实际值来返回,如果没有设置,结果就会返回false。

  1. grep: function( elems, callback, inv ) {
  2. var ret = [], retVal;
  3. inv = !!inv;
  4. // Go through the array, only saving the items
  5. // that pass the validator function
  6. for ( var i = 0, length = elems.length; i < length; i++ ) {
  7. retVal = !!callback( elems[ i ], i );
  8. if ( inv !== retVal ) {
  9. ret.push( elems[ i ] );
  10. }
  11. }
  12. return ret;
  13. }

这是jquery中一个比较经典的例子,

在使用grep函数的时候,如果给出了第三个参数且非null/undefined/0""/等值,则inv为     true,否则为false。这样做的目的就是保证inv和retVal的值都只能在true/false中取,而非其它值,为后续判断提供便利。

js中两个感叹号的原理与用法分析相关推荐

  1. js中两个感叹号的作用

    !!唯一的作用就是把值转化为布尔值,其实对代码逻辑来说没什么卵用,即使不用不会有任何问题,只是看起来统一了数据类型为布尔值,实际上在我看来完全多此一举,建议不用 实际上Boolean(a)和!!a效果 ...

  2. php new对象 调用函数,关于JS中new调用函数的原理介绍

    这篇文章主要介绍了关于JS中new调用函数的原理介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 JavaScript 中经常使用构造函数创建对象(通过 new 操作符调用一个函数) ...

  3. js中两个对象的比较

    代码取自于underscore.js 1.8.3的isEqual函数. 做了一些小小的修改,主要是Function的比较修改. 自己也加了一些代码解读. <!DOCTYPE html> & ...

  4. js中两个等号“==“与三个等号“===“有何不同

    一.1个等号"=": 首先一个等号"=",大家都知道,一般在编程语言中是用来做赋值操作的,也叫赋值运算符,即把等号右边的值,赋值给左边声明的变量. 例如:在js ...

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

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

  6. return true Java_[Java教程]js中return,return true,return false的用法及区别

    [Java教程]js中return,return true,return false的用法及区别 0 2015-11-16 23:00:03 1.语法及返回方式 ①返回控制与函数结果 语法为:retu ...

  7. js中几个对象的区别和用法

    js中几个对象的区别和用法 今天总结一下js中几个对象的区别和用法: 首先来说说 parent.window与top.window的用法 "window.location.href" ...

  8. js中parentNode和parentElement的区别和用法

    了解本篇的基础必须知道什么是节点,关于html dom节点知识点和节点类型的知识,分别看<js节点都有哪些类型?怎么判断是哪种节点类型?>和<js属性节点获取和移除>,下面直接 ...

  9. python装饰器原理-Python装饰器原理与用法分析

    这篇文章主要介绍了Python装饰器原理与用法,结合实例形式分析了Python装饰器的概念.原理.使用方法及相关操作注意事项,需要的朋友可以参考下 本文实例讲述了Python装饰器原理与用法.分享给大 ...

最新文章

  1. [MySQL Reference Manual] 5 MySQL 服务管理
  2. Java反射 - 2(对象复制,父类域,内省)
  3. [architecture]-DBG、DMB、DSB 和 ISB指令介绍
  4. 10-对象实例化、内存布局与访问定位
  5. 鸟哥linux私房菜 之 老段带你学习linux
  6. ldconfig mysql_ldconfig命令介绍
  7. abap 取日期最大_Pointer干货分享:SQL面试50题思路解答与分类整理(下)CASE与日期函数...
  8. UVA 11235 - Frequent values
  9. 深度学习花书-2.10 PCA数学推导
  10. java获取动态输入_java-如何在Spring中以bean形式接收动态生成的输入值
  11. 微星GE60有线网卡Qualcomm Atheros Bigfoot Killer E2200 ethernet card在ubuntu下无法找到驱动的解决办法...
  12. C# 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC...
  13. 程序员,这样做你的面试成功率将达到 90%
  14. 【黑马程序员pink老师前端】HTML
  15. 计算机视觉论文-2021-11-01
  16. alert弹框DeprecationWarning
  17. java中方法的细分(普通方法,静态方法,构造方法)
  18. 关于安装双系统时多重引导的说明
  19. DNS域名服务协议和其实现Bind应用
  20. picoctf 2021 Scavenger Hunt

热门文章

  1. 转载CSDN (MVC WebAPI 三层分布式框架开发)
  2. HDOJ 1143 Tri Tiling
  3. 创建、编辑、删除目录
  4. android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)
  5. WinCE流驱动加载的控制
  6. iframe嵌入页面白屏_Vue使用iframe嵌入第三方网页并修改标题
  7. 第18条:接口优于抽象类
  8. 【线性表4】线性表的链式实现:静态表
  9. session存入redis或memcached
  10. Win7如何快速打开命令提示符