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 相关文章推荐
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
Jun 22 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
Aug 20 Javascript
Javascript中设置默认参数值示例
Sep 11 Javascript
Js实现网页键盘控制翻页的方法
Oct 30 Javascript
js读取cookie方法总结
Oct 31 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
Mar 11 Javascript
jQuery简单获取键盘事件的方法
Jan 22 Javascript
理解JavaScript原型链
Oct 25 Javascript
通过javascript实现段落的收缩与展开
Jun 26 Javascript
Jquery让form表单异步提交代码实现
Nov 14 jQuery
15个简单的JS编码标准让你的代码更整洁(小结)
Jul 16 Javascript
7个你应该知道的JS原生错误类型
Apr 29 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中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
php使用google地图应用实例
2014/12/31 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
javascript removeChild 使用注意事项
2009/04/11 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
canvas实现弧形可拖动进度条效果
2017/05/11 Javascript
JavaScript之Date_动力节点Java学院整理
2017/06/28 Javascript
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
2017/07/05 NodeJs
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
vue使用video插件vue-video-player详解
2020/10/23 Javascript
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
用python找出那些被“标记”的照片
2017/04/20 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
2017/08/08 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
新兵入伍决心书
2015/09/22 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python