探讨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 相关文章推荐
用js实现控制内容的向上向下滚动效果
Jun 26 Javascript
js中将String转换为number以便比较
Jul 08 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
Jan 02 Javascript
JavaScript实现图片轮播组件代码示例
Nov 22 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
Jul 13 Javascript
深入理解Vue 单向数据流的原理
Nov 09 Javascript
在vue项目中引入highcharts图表的方法(详解)
Mar 05 Javascript
详解关于微信setData回调函数中的坑
Feb 18 Javascript
vue输入节流,避免实时请求接口的实例代码
Oct 30 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
Jul 26 Javascript
javascript实现点击按钮切换轮播图功能
Sep 23 Javascript
8个非常实用的Vue自定义指令
Dec 15 Vue.js
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 之 没有mysql支持时的替代方案
2006/10/09 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
php生成txt文件实例代码介绍
2016/04/28 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
基于jquery创建的一个图片、视频缓冲的效果样式插件
2012/08/28 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
修改或扩展jQuery原生方法的代码实例
2015/01/13 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
js实现上传并压缩图片效果
2018/01/10 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
Python中特殊函数集锦
2015/07/27 Python
linecache模块加载和缓存文件内容详解
2018/01/11 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
Tensorflow轻松实现XOR运算的方式
2020/02/03 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
Urban Outfitters英国官网:美国平价服饰品牌
2016/11/25 全球购物
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
编辑求职信样本
2013/12/16 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL