我绝不是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;
}
如果有人能解释得更好一点,我会很感激的!
当前回答
第一个!将变量强制为布尔类型并将其反转。第二个!再次反转它(为您所检查的任何内容提供原始的(正确的)布尔值)。
为了清晰起见,你最好使用
return Boolean(....);
其他回答
使用! !变量可以保证将类型转换为布尔值。
举个简单的例子:
"" == false (is true)
"" === false (is false)
!!"" == false (is true)
!!"" === false (is true)
但如果你在做以下事情,使用它是没有意义的:
var a = ""; // or a = null; or a = undefined ...
if(!!a){
...
if将它转换为布尔值,因此不需要进行隐式双重否定转换。
这与JavaScript的弱类型有关。document.createElement(“画布”)。getContext是一个函数对象。通过预先一个单!它将其作为布尔表达式计算,并将答案翻转。通过预先放置另一个!,它将把答案翻转回来。最终结果是函数将其作为布尔表达式计算,但返回实际的布尔结果,而不是函数对象本身。将! !是将表达式类型转换为布尔类型的一种快速且不方便的方法。
第一个!将变量强制为布尔类型并将其反转。第二个!再次反转它(为您所检查的任何内容提供原始的(正确的)布尔值)。
为了清晰起见,你最好使用
return Boolean(....);
! 将"something"/"anything"转换为布尔值。
! !返回原始的布尔值(并保证表达式现在是布尔值,而不管之前是什么)
如果document.createElement(“画布”)。getContext不是undefined或null,它将返回true。否则返回false。