我绝不是Javascript方面的专家,但我一直在阅读Mark Pilgrim的“Dive into HTML5”网页,他提到了一些我想更好理解的东西。
他州:
最后,使用双重否定技巧将结果强制为布尔值(true或false)。
function supports_canvas() {
return !!document.createElement('canvas').getContext;
}
如果有人能解释得更好一点,我会很感激的!
我绝不是Javascript方面的专家,但我一直在阅读Mark Pilgrim的“Dive into HTML5”网页,他提到了一些我想更好理解的东西。
他州:
最后,使用双重否定技巧将结果强制为布尔值(true或false)。
function supports_canvas() {
return !!document.createElement('canvas').getContext;
}
如果有人能解释得更好一点,我会很感激的!
当前回答
document.createElement(“画布”)。getContext可以计算为undefined或对象引用。undefined的结果为true, ![some_object]的结果为false。这就是我们需要的,只是倒过来。所以! !用于将undefined转换为false,将对象引用转换为true。
其他回答
如果document.createElement(“画布”)。getContext不是undefined或null,它将返回true。否则返回false。
逻辑上的NOT运算符!将值转换为与其逻辑值相反的布尔值。
第二个!将先前的布尔结果转换回其原始逻辑值的布尔表示形式。
从这些文档中可以找到逻辑NOT操作符:
如果它的单个操作数可以转换为true则返回false;否则,返回true。
因此,如果getContext给你一个“假”值,!!将使它返回布尔值false。否则返回true。
“伪”值是:
假 南 未定义的 零 ""(空字符串) 0
第一个!将变量强制为布尔类型并将其反转。第二个!再次反转它(为您所检查的任何内容提供原始的(正确的)布尔值)。
为了清晰起见,你最好使用
return Boolean(....);
! 将"something"/"anything"转换为布尔值。
! !返回原始的布尔值(并保证表达式现在是布尔值,而不管之前是什么)
document.createElement(“画布”)。getContext可以计算为undefined或对象引用。undefined的结果为true, ![some_object]的结果为false。这就是我们需要的,只是倒过来。所以! !用于将undefined转换为false,将对象引用转换为true。