我正在查看一本关于HTML 5的书,其中包含以下JavaScript代码片段。双感叹号代表什么意思?
return ! ! document.createElement('video').canPlayType;
我正在查看一本关于HTML 5的书,其中包含以下JavaScript代码片段。双感叹号代表什么意思?
return ! ! document.createElement('video').canPlayType;
!
运算符表示取反,而第二个 !
会对初始的取反结果再次取反。这基本上将右侧的任何内容强制转换为布尔值(true 或 false)。
!false // true
!!false // false
因此,如果该方法被定义,则会将 function
强制转换为 true
。
document.createElement('video').canPlayType
因此,上述代码返回一个函数。我们不想要一个函数,而是想要一个明确的布尔值,所以我们对其进行两次否定操作,由于 function
不是假值 (0、null、false、空字符串、NaN),因此它会在支持该方法的浏览器中返回 true。
!!document.createElement('video').canPlayType // true
如果该方法不受支持,浏览器将返回undefined
。! undefined
为真,!true
为假,因此!!document.createElement('video').LOL
将返回false
。document.createElement('video').canPlayType
不会返回布尔值吗?还是说如果它是 null
,那么 !!(null) = false
? - hunter!null
应该抛出异常... 真糟糕。 - hunter