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 相关文章推荐
extjs fckeditor集成代码
May 10 Javascript
Javascript模块化编程详解
Dec 01 Javascript
jquery实现搜索框常见效果的方法
Jan 22 Javascript
js实现拖拽效果
Feb 12 Javascript
js性能优化技巧
Nov 29 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
Jun 03 Javascript
jquery层级选择器的实现(匹配后代元素div)
Sep 05 Javascript
Bootstrap布局之栅格系统学习笔记
May 04 Javascript
js和jquery中获取非行间样式
May 05 jQuery
Bootstrap Tree View简单而优雅的树结构组件实例解析
Jun 15 Javascript
vue中注册自定义的全局js方法
Nov 15 Javascript
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 jQuery
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之PHP语法学习笔记1
2006/12/17 PHP
PHP中动态显示签名和ip原理
2007/03/28 PHP
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
JavaScript 中的日期和时间及表示标准介绍
2013/08/21 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
webpack开发跨域问题解决办法
2017/08/03 Javascript
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
使用post方法实现json往返传输数据的方法
2019/03/30 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
2020/09/02 Javascript
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
2021/01/13 Vue.js
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
Pandas读取csv时如何设置列名
2020/06/02 Python
python使用多线程查询数据库的实现示例
2020/08/17 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
英国领先的鞋类零售商和顶级品牌的官方零售商:Wynsors
2020/02/17 全球购物
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
秘书英文求职信范文
2014/01/31 职场文书
销售总经理岗位职责
2014/03/15 职场文书
环保公益策划方案
2014/08/15 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书