探讨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 相关文章推荐
Three.js源码阅读笔记(光照部分)
Dec 27 Javascript
js实现文本框宽度自适应文本宽度的方法
Aug 13 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
Dec 16 Javascript
JavaScript实现搜索框的自动完成功能(一)
Feb 25 Javascript
纯前端JavaScript实现Excel IO案例分享
Aug 26 Javascript
微信小程序 天气预报开发实例代码源码
Jan 20 Javascript
从零学习node.js之mysql数据库的操作(五)
Feb 24 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
Mar 17 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
Mar 20 Javascript
通过构造函数实例化对象的方法
Jun 28 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
Sep 21 jQuery
详解Typescript 内置的模块导入兼容方式
May 31 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
php中截取字符串支持utf-8
2007/01/18 PHP
PHP删除HTMl标签的实现代码
2013/06/30 PHP
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
java script编程起步(第三课)
2007/01/10 Javascript
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
javascript常见操作汇总
2014/09/03 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
浅谈JS继承_寄生式继承 & 寄生组合式继承
2016/08/16 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
2017/12/18 Javascript
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
在Python中marshal对象序列化的相关知识
2015/07/01 Python
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
Python3.6正式版新特性预览
2016/12/15 Python
判断python对象是否可调用的三种方式及其区别详解
2019/01/31 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
Woolworth官网:澳洲第一大超市
2017/06/25 全球购物
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
车间调度岗位职责
2013/11/30 职场文书
工程专业应届生求职信
2014/02/19 职场文书
大学共青团员个人自我评价
2014/04/16 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书