js中两个感叹号的原理与用法分析
在javascript中有时会看到有两个!!的用法
- 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中取,而非其它值,为后续判断提供便利。
js中两个感叹号的原理与用法分析相关推荐
- js中两个感叹号的作用
!!唯一的作用就是把值转化为布尔值,其实对代码逻辑来说没什么卵用,即使不用不会有任何问题,只是看起来统一了数据类型为布尔值,实际上在我看来完全多此一举,建议不用 实际上Boolean(a)和!!a效果 ...
- php new对象 调用函数,关于JS中new调用函数的原理介绍
这篇文章主要介绍了关于JS中new调用函数的原理介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 JavaScript 中经常使用构造函数创建对象(通过 new 操作符调用一个函数) ...
- js中两个对象的比较
代码取自于underscore.js 1.8.3的isEqual函数. 做了一些小小的修改,主要是Function的比较修改. 自己也加了一些代码解读. <!DOCTYPE html> & ...
- js中两个等号“==“与三个等号“===“有何不同
一.1个等号"=": 首先一个等号"=",大家都知道,一般在编程语言中是用来做赋值操作的,也叫赋值运算符,即把等号右边的值,赋值给左边声明的变量. 例如:在js ...
- Javascript中!!(两个感叹号,双感叹号)的含义
使用Javascript时,有时会在变量前面加上两个感叹号,这样做表示什么含义呢?Javascript中,!表示运算符"非",如果变量不是布尔类型,会将变量自动转化为布尔类型,再取 ...
- 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 ...
- js中几个对象的区别和用法
js中几个对象的区别和用法 今天总结一下js中几个对象的区别和用法: 首先来说说 parent.window与top.window的用法 "window.location.href" ...
- js中parentNode和parentElement的区别和用法
了解本篇的基础必须知道什么是节点,关于html dom节点知识点和节点类型的知识,分别看<js节点都有哪些类型?怎么判断是哪种节点类型?>和<js属性节点获取和移除>,下面直接 ...
- python装饰器原理-Python装饰器原理与用法分析
这篇文章主要介绍了Python装饰器原理与用法,结合实例形式分析了Python装饰器的概念.原理.使用方法及相关操作注意事项,需要的朋友可以参考下 本文实例讲述了Python装饰器原理与用法.分享给大 ...
最新文章
- [MySQL Reference Manual] 5 MySQL 服务管理
- Java反射 - 2(对象复制,父类域,内省)
- [architecture]-DBG、DMB、DSB 和 ISB指令介绍
- 10-对象实例化、内存布局与访问定位
- 鸟哥linux私房菜 之 老段带你学习linux
- ldconfig mysql_ldconfig命令介绍
- abap 取日期最大_Pointer干货分享:SQL面试50题思路解答与分类整理(下)CASE与日期函数...
- UVA 11235 - Frequent values
- 深度学习花书-2.10 PCA数学推导
- java获取动态输入_java-如何在Spring中以bean形式接收动态生成的输入值
- 微星GE60有线网卡Qualcomm Atheros Bigfoot Killer E2200 ethernet card在ubuntu下无法找到驱动的解决办法...
- C# 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC...
- 程序员,这样做你的面试成功率将达到 90%
- 【黑马程序员pink老师前端】HTML
- 计算机视觉论文-2021-11-01
- alert弹框DeprecationWarning
- java中方法的细分(普通方法,静态方法,构造方法)
- 关于安装双系统时多重引导的说明
- DNS域名服务协议和其实现Bind应用
- picoctf 2021 Scavenger Hunt