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 相关文章推荐
获取当前网页document.url location.href区别总结
May 10 Javascript
JavaScrip单线程引擎工作原理分析
Sep 04 Javascript
解析javascript 数组以及json元素的添加删除
Jun 26 Javascript
javascript中全局对象的parseInt()方法使用介绍
Dec 19 Javascript
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
Aug 18 Javascript
JavaScript中的this,call,apply使用及区别详解
Jan 29 Javascript
jQuery实现简单的滑动导航代码(移动端)
May 22 jQuery
微信小程序tabbar不显示解决办法
Jun 08 Javascript
二维码图片生成器QRCode.js简单介绍
Aug 18 Javascript
js实现登录与注册界面
Nov 01 Javascript
validform表单验证的实现方法
Mar 08 Javascript
JS数组的常用方法整理
Mar 31 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 Static关键字实用方法
2010/06/04 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
PHP三种方式实现链式操作详解
2017/01/21 PHP
PHP简单实现防止SQL注入的方法
2018/03/13 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
eval与window.eval的差别分析
2011/03/17 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
可插入图片的TEXT文本框
2013/12/27 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
JS实现控制表格只显示行边框或者只显示列边框的方法
2015/03/31 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
2018/08/16 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
JS隐藏号码中间4位代码实例
2019/04/09 Javascript
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
对dataframe进行列相加,行相加的实例
2018/06/08 Python
python实现linux下抓包并存库功能
2018/07/18 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
百联网上商城:i百联
2017/01/28 全球购物
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
幼儿园教师国培感言
2014/02/02 职场文书
车队司机个人自我鉴定
2014/04/17 职场文书
工作会议方案
2014/05/21 职场文书
村班子对照检查材料
2014/08/18 职场文书
党的群众路线教育实践活动批评与自我批评范文
2014/10/16 职场文书
党组织结对共建协议书
2016/03/23 职场文书
升职自荐书
2019/05/09 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers