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判断变量是否为空的自定义函数分享
Jan 31 Javascript
实现非常简单的js双向数据绑定
Nov 06 Javascript
jQuery自定义动画函数实例详解(附demo源码)
Dec 10 Javascript
javascript验证手机号和实现星号(*)代替实例
Aug 16 Javascript
Jquery和Js获得元素标签名称的方法总结
Oct 08 Javascript
如何判断出一个js对象是否一个dom对象
Nov 24 Javascript
工厂模式在JS中的实践
Jan 18 Javascript
js中new一个对象的过程
Feb 20 Javascript
node.js中实现kindEditor图片上传功能的方法教程
Apr 26 Javascript
checkbox:click事件触发span元素内容改变的方法
Sep 11 Javascript
Angular2 父子组件通信方式的示例
Jan 29 Javascript
vue-i18n结合Element-ui的配置方法
May 20 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
我的论坛源代码(五)
2006/10/09 PHP
PHP5中虚函数的实现方法分享
2011/04/20 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
2013/06/26 PHP
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
php简单分页类实现方法
2015/02/26 PHP
PHP7内核之Reference详解
2019/03/14 PHP
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
Javascript实现DIV滚动自动滚动到底部的代码
2012/03/01 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
2020/10/13 Javascript
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
pyv8学习python和javascript变量进行交互
2013/12/04 Python
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
python和c语言哪个更适合初学者
2020/06/22 Python
详解Html5 监听拦截Android返回键方法
2018/04/18 HTML / CSS
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
给老师的检讨书
2014/02/11 职场文书
教师对学生的评语
2014/04/28 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
HTTP中的Content-type详解
2022/01/18 HTML / CSS