本文解析JavaScript中双感叹号(!!)的用法,说明其如何将任意值转换为布尔值。通过对比三元运算符,展示非空字符串和非零数字返回true,而0、null、false等返回false的具体行为,帮助开发者理解这一简洁的布尔转换技巧。
双感叹号在代码中的实际应用
在阅读qunit源代码时,注意到一段代码使用了双感叹号,虽然能理解其意图,但对其具体作用尚存疑惑。
相关代码片段如下:
function id( name ) {
return !!( typeof document !== "undefined" && document && document.getElementById ) &&
document.getElementById( name );
}双感叹号与三元运算符的等价关系
查阅相关资料后发现,双感叹号的作用类似于三元运算符,主要用于返回布尔值。
示例代码如下:
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); //true
var a = 0; alert(!!a); //false
var a = ""; alert(!!a); //false
var a = false; alert(!!a); //false
var a = null; alert(!!a); //false