在javascript中返回值的双重感叹号

ste*_*eve 17 javascript

我正在查看一本关于html 5的书,它包含了这个tid的js.双重感叹是什么意思?

return ! ! document.createElement('video').canPlayType;
Run Code Online (Sandbox Code Playgroud)

med*_*iev 23

!操作者否定,并且次级!否定inital否定的结果.这基本上将右侧的任何内容转换为布尔值(true或false).

!false // true
!!false // false
Run Code Online (Sandbox Code Playgroud)

因此,如果定义了方法function,则将其转换为truthy true.

document.createElement('video').canPlayType
Run Code Online (Sandbox Code Playgroud)

所以上面返回一个函数.我们不需要一个函数,我们想要一个显式的布尔值,所以我们将它否定两次,因为function它不是假的(0,null,false,空字符串,NaN),那么它对于支持这种方法的浏览器返回true.

!!document.createElement('video').canPlayType // true
Run Code Online (Sandbox Code Playgroud)

如果不支持该方法,浏览器将返回undefined.!undefined是真的,!true是假的,所以!!document.createElement('video').LOL会回来false


Jam*_*acs 9

双重感叹是一种JavaScript技巧,无论输入如何都会返回true/false.在您的示例中,如果浏览器不支持视频标记,则它将返回undefined.!undefined是真的.所以!! undefined是假的.如果浏览器支持视频,则返回true.!!真的也是如此.这使您无需处理未定义的情况.