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 相关文章推荐
Prototype最新版(1.5 rc2)使用指南(1)
Jan 10 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
Jun 08 Javascript
Javascript中各种trim的实现详细解析
Dec 10 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
Jun 05 Javascript
node.js不得不说的12点内容
Jul 14 Javascript
noty ? jQuery通知插件全面解析
May 18 Javascript
angular学习之ngRoute路由机制
Apr 12 Javascript
jQuery 利用ztree实现树形表格的实例代码
Sep 27 jQuery
vue实现验证码输入框组件
Dec 14 Javascript
JavaScript实现的文本框placeholder提示文字功能示例
Jul 25 Javascript
JavaScript语法约定和程序调试原理解析
Nov 03 Javascript
js 数据类型判断的方法
Dec 03 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学习资源和链接.
2006/12/05 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
一个简单的node.js界面实现方法
2018/06/01 Javascript
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
VSCode launch.json配置详细教程
2020/06/18 Javascript
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
基于python编写的微博应用
2014/10/17 Python
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
TensorFlow损失函数专题详解
2018/04/26 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
pip install urllib2不能安装的解决方法
2018/06/12 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
Python imutils 填充图片周边为黑色的实现
2020/01/19 Python
python中if及if-else如何使用
2020/06/02 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
中职生自我鉴定范文
2013/10/03 职场文书
优秀教师先进材料
2014/12/16 职场文书
英文商务邀请函范文
2015/01/31 职场文书
小学运动会入场词
2015/07/18 职场文书
《中彩那天》教学反思
2016/02/24 职场文书
Win11安装受阻怎么办? Windows11安装问题与解决方案汇总
2021/11/21 数码科技
CentOS安装Nginx并部署vue
2022/04/12 Servers