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 相关文章推荐
番茄的表单验证类代码修改版
Jul 18 Javascript
jquery实现metro效果示例代码
Sep 06 Javascript
JS关键字球状旋转效果的实例代码
Nov 29 Javascript
JS中的数组的sort方法使用示例
Jan 22 Javascript
jQuery学习总结之jQuery事件
Jun 30 Javascript
Jquery 实现图片轮换
Jan 28 Javascript
Knockoutjs 学习系列(二)花式捆绑
Jun 07 Javascript
文本框只能输入数字的js代码(含小数点)
Jul 10 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
Sep 04 Javascript
微信小程序实现同一页面取值的方法分析
Apr 30 Javascript
小程序的上传文件接口的注意要点解析
Sep 17 Javascript
原生JavaScript实现幻灯片效果
Feb 19 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获取发送给用户的header信息的方法
2015/03/16 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
2016/04/20 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
Vue封装一个简单轻量的上传文件组件的示例
2018/03/21 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
Vue动态加载异步组件的方法
2018/11/21 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
python json.loads兼容单引号数据的方法
2018/12/19 Python
Python实现的拉格朗日插值法示例
2019/01/08 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
Python实现像awk一样分割字符串
2020/09/15 Python
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
华为c/c++笔试题
2016/01/25 面试题
美术第二课堂活动总结
2014/07/08 职场文书
安全环保演讲稿
2014/08/28 职场文书
地球物理学专业推荐信
2014/09/08 职场文书
2014年合同管理工作总结
2014/12/02 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
Python合并pdf文件的工具
2021/07/01 Python
golang为什么要统一错误处理
2022/04/03 Golang