在javascript中有时会看到有两个!!的用法。我很少用到(本人在js方面是菜鸟),但是在一些开源框架(如jquery)中经常看到。所以参考网上的相关资料总结了一下它的用法。
var foo; alert(!foo);//undifined情况下,一个感叹号返回的是true; alert(!goo);//null情况下,一个感叹号返回的也是true; var o={flag:true}; var test=!!o.flag;//等效于var test=o.flag||false; alert(test);
这段例子,演示了在undifined和null时,用一个感叹号返回的都是true,用两个感叹号返回的就是false,所以两个感叹号的作用就在于,如果明确设置了变量的值(非null/undifined/0/""等值),结果就会根据变量的实际值来返回,如果没有设置,结果就会返回false。
grep: function( elems, callback, inv ) { var ret = [], retVal; inv = !!inv; // Go through the array, only saving the items // that pass the validator function for ( var i = 0, length = elems.length; i < length; i++ ) { retVal = !!callback( elems[ i ], i ); if ( inv !== retVal ) { ret.push( elems[ i ] ); } } return ret; }
这是jquery中一个比较经典的例子,
在使用grep函数的时候,如果给出了第三个参数且非null/undefined/0""/等值,则inv为 true,否则为false。这样做的目的就是保证inv和retVal的值都只能在true/false中取,而非其它值,为后续判断提供便利。
相关推荐
用两个感叹号的作用就在于,如果明确设置了o中flag的值(非null/undefined/0""/等值),自然test就会取跟o.flag一样的值;如果没有设置,test就会默认为false,而不是null或undefined
的情况,本文即以实例形式较为深入的分析javascript中2个感叹号的用法。分享给大家供大家参考之用。具体分析如下: javascript中的!!是逻辑”非非”,即是在逻辑“非”的基础上再”非”一次。通过!或!!可以将很多...
kettle中使用js计算两个日期之间的天数
JavaScript模板引擎原理与用法详解.docx
本文实例讲述了JS高阶函数原理与用法。分享给大家供大家参考,具体如下: 如果您正在学习JavaScript,那么您必须遇到高阶函数这个术语。这听起来复杂,其实不然。 使JavaScript适合函数式编程的原因是它接受高阶...
主要介绍了JavaScript中BOM对象原理与用法,,结合实例形式分析了javascript中BOM浏览器对象模型相关概念、原理、用法及相关操作注意事项,需要的朋友可以参考下
本文实例讲述了node.js中Buffer缓冲器的原理与使用方法。分享给大家供大家参考,具体如下: 一、什么是Buffer Buffer缓冲器是用来存储输入和输出数据的一段内存。js语言没有二进制数据类型,在处理TCP和文件流的时候...
主要介绍了JavaScript中判断两个字符串是否相等的方法,是JS入门学习中的基础知识,需要的朋友可以参考下
js中的双感叹号判断。在网上查了些资料,他相当于三元运算符,返回boolean值
本文实例分析了JavaScript事件委托原理与用法。分享给大家供大家参考,具体如下: 在日常中,我们可能会听到事件委托这样的概念,有些同学可能对事件委托已经很了解了,也有些同学可能只是听过事件委托,只是会简单...
两个比较常用的Eclipse中javascript插件jsEditor jsEclipse
js中数组排序sort方法的原理分析.docx
本文实例讲述了JavaScript函数柯里化原理与用法。分享给大家供大家参考,具体如下: 柯里化是这样的一个转换过程,把接受多个参数的函数变换成接受一个单一参数(译注:最初函数的第一个参数)的函数,如果其他的参数...
编译原理-词法分析实验(javascript+html)实现编译原理可视化 通过设计一个词法分析程序,对词法进行分析,加强对词法的理解...本实验雷同可能性少,并且采用可视化展示的方法,很直观可以看出编译原理词法分析的细节
本文实例讲述了JS严格模式原理与用法。分享给大家供大家参考,具体如下: 使用 “use strict” 指令 “use strict” 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。 它不是一条语句,但是是一个字面量表达式,在 ...
因此对 JavaScript 中的复杂数据类型(object)来说,也会有浅拷贝和深拷贝的概念:浅拷贝指两个不同的变量存的是同一个对象的地址,即两个变量指向同一块内存区域;深拷贝则是重新分配了一块内