JavaScript中两个感叹号的作用说明


Posted in Javascript onDecember 28, 2011

先用一个简单的例子说明:

var o={flag:true}; 
var test=!!o.flag;//等效于var test=o.flag||false; 
alert(test);

由于对null与undefined用!操作符时都会产生true的结果,所以用两个感叹号的作用就在于,如果明确设置了o中flag的值(非null/undefined/0""/等值),自然test就会取跟o.flag一样的值;如果没有设置,test就会默认为false,而不是null或undefined。
在jQuery中比较经典的例子如下:(jQuery 1.7.0.js: Line 748)
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; 
}

在使用grep函数的时候,如果给出了第三个参数且非null/undefined/0""/等值,则inv为true,否则为false。这样做的目的就是保证inv和retVal的值都只能在true/false中取,而非其它值,为后续判断提供便利。
Javascript 相关文章推荐
javascript动态加载二
Aug 22 Javascript
jQuery div层的放大与缩小简单实现代码
Mar 28 Javascript
jQuery简易图片放大特效示例代码
Jun 09 Javascript
JavaScript中window.showModalDialog()用法详解
Dec 18 Javascript
七夕情人节丘比特射箭小游戏
Aug 20 Javascript
BootStrap glyphicon图标无法显示的解决方法
Sep 06 Javascript
基于slideout.js实现移动端侧边栏滑动特效
Nov 28 Javascript
微信小程序 devtool隐藏的秘密
Jan 21 Javascript
JS实现的计数排序与基数排序算法示例
Dec 04 Javascript
JS使用队列对数组排列,基数排序算法示例
Mar 02 Javascript
layer页面跳转,获取html子节点元素的值方法
Sep 27 Javascript
关于antd tree 和父子组件之间的传值问题(react 总结)
Jun 02 Javascript
javascript (用setTimeout而非setInterval)
Dec 28 #Javascript
js字符编码函数区别分析
Dec 28 #Javascript
javascript获得服务器端控件的ID的实现代码
Dec 28 #Javascript
Jquery异步请求数据实例代码
Dec 28 #Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
Dec 26 #Javascript
js使用函数绑定技术改变事件处理程序的作用域
Dec 26 #Javascript
JavaScript中的property和attribute介绍
Dec 26 #Javascript
You might like
聊天室php&amp;mysql(五)
2006/10/09 PHP
php命令行使用方法和命令行参数说明
2014/04/08 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
JavaScript 继承详解(四)
2009/07/13 Javascript
JS组件Form表单验证神器BootstrapValidator
2016/01/26 Javascript
JavaScript字符串常用的方法
2016/03/10 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
浅谈JavaScript中等号、双等号、 三等号的区别
2020/08/06 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
2020/10/31 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
Python httplib,smtplib使用方法
2008/09/06 Python
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
Pyhton中单行和多行注释的使用方法及规范
2016/10/11 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
详解Python正则表达式re模块
2019/03/19 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
Pycharm中如何关掉python console
2020/10/27 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
本科应届生求职信
2014/08/05 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
2015年招聘工作总结
2014/12/12 职场文书
MySQL GTID复制的具体使用
2022/05/20 MySQL