探讨js中的双感叹号判断


Posted in Javascript onNovember 11, 2013

今天看qunit源代码,发现一段很奇怪的代码,虽然能领会他的意思,但是不明白双感叹号起到的作用。

function id( name ) {
    return !!( typeof document !== "undefined" && document && document.getElementById ) &&
        document.getElementById( name );
}

然后去网上查了些资料,他相当于三元运算符,返回boolean值。
var ret = !!document.getElementById

等价于:
var ret = document.getElementById ? true : false;

当值是非空字符串和非零数字返回true,当值是空字符串、0或者null返回false。
var a = " "; alert(!!a);   //true
var a = "s"; alert(!!a);   //true
var a = true; alert(!!a);   //true
var a = 1; alert(!!a);   //true
var a = -1; alert(!!a);   //true
var a = -2; alert(!!a);   //truevar a = 0; alert(!!a);   //false
var a = ""; alert(!!a);   //false
var a = false; alert(!!a);   //false
var a = null; alert(!!a);   //false
Javascript 相关文章推荐
比较详细的关于javascript中void(0)的具体含义解释
Aug 02 Javascript
js中 关于undefined和null的区别介绍
Apr 16 Javascript
jQuery操作JSON的CRUD用法实例
Feb 25 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
Mar 04 Javascript
JavaScript数组对象赋值用法实例
Aug 04 Javascript
jquery实现叠层3D文字特效代码分享
Aug 21 Javascript
AngularJS ng-app 指令实例详解
Jul 30 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
Nov 21 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
Jan 13 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
Feb 05 Javascript
Angular2之二级路由详解
Aug 31 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
Jan 07 Javascript
js时间戳格式化成日期格式的多种方法
Nov 11 #Javascript
JavaScript中判断对象类型的几种方法总结
Nov 11 #Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
Nov 11 #Javascript
js中关于一个分号的崩溃示例
Nov 11 #Javascript
javascript中怎么做对象的类型判断
Nov 11 #Javascript
jquery隐藏标签和显示标签的实例
Nov 11 #Javascript
jquery(hide方法)隐藏指定元素实例
Nov 11 #Javascript
You might like
德生PL330的评价与改造
2021/03/02 无线电
php检测文件编码的方法示例
2014/04/25 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
JavaScript+html5 canvas实现本地截图教程
2020/04/16 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
vue 动态修改a标签的样式的方法
2018/01/18 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
python基础教程之元组操作使用详解
2014/03/25 Python
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
Python多线程编程(六):可重入锁RLock
2015/04/05 Python
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
Python生成器generator用法示例
2018/08/10 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
django框架ModelForm组件用法详解
2019/12/11 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
简历的个人自我评价范文
2014/01/03 职场文书
爱国主义教育演讲稿
2014/08/26 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
小学大队委竞选口号
2015/12/25 职场文书
golang中的并发和并行
2021/05/08 Golang
如何利用Python实现一个论文降重工具
2021/07/09 Python
详解Python中__new__方法的作用
2022/03/31 Python
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
Redis基本数据类型String常用操作命令
2022/06/01 Redis