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 相关文章推荐
jQuery 删除/替换DOM元素的几种方式
May 20 Javascript
express的中间件bodyParser详解
Dec 04 Javascript
使用javascript实现简单的选项卡切换
Jan 09 Javascript
js实现仿阿里巴巴城市选择框效果实例
Jun 24 Javascript
javascript实现的简单计时器
Jul 19 Javascript
详细解读JavaScript的跨浏览器事件处理
Aug 12 Javascript
JavaScript构造函数详解
Dec 27 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
Jul 24 Javascript
浅谈angularjs中响应回车事件
Apr 24 Javascript
深入理解react-router 路由的实现原理
Sep 26 Javascript
vue-router为激活的路由设置样式操作
Jul 18 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
Sep 12 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中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
php面向对象重点知识分享
2019/09/27 PHP
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
基于jquery实现简单的分页控件
2016/03/17 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
jQuery操作之效果详解
2017/05/19 jQuery
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
vue实现在表格里,取每行的id的方法
2018/03/09 Javascript
Vue配合iView实现省市二级联动的示例代码
2018/07/27 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
JS查找孩子节点简单示例
2019/07/25 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
JS实现网页时钟特效
2020/03/25 Javascript
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
python 获取文件列表(或是目录例表)
2009/03/25 Python
基于Python的接口测试框架实例
2016/11/04 Python
Python操作MongoDB详解及实例
2017/05/18 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
Python+Django搭建自己的blog网站
2018/03/13 Python
Python测试网络连通性示例【基于ping】
2018/08/03 Python
Python接口开发实现步骤详解
2020/04/26 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
自荐书封面下载
2013/11/29 职场文书
JAVA程序员自荐书
2014/01/30 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
2015年汽车销售工作总结
2015/04/07 职场文书