double exclamation on a return value in javascript
我在看一本书,里面有一点JS。双感叹号是什么意思?
1
| return ! ! document.createElement('video').canPlayType; |
- 我很喜欢它,双重否定在编程语言中很有用。我的英语老师说不要用双重否定。"我不想什么都不做。"现在变成了一个有意义的句子。:)
- 我可能是一个先尝试搜索stackoverflow再询问的IDEAA。stackoverflow.com/questions/784929/…
- 很抱歉。我在"双感叹号javascript"下做了一个搜索,没有找到任何内容。
!运算符否定,次!运算符否定初始否定的结果。这基本上是将右侧的内容类型化为布尔值(对或错)。
1 2
| !false // true
!!false // false |
因此,如果定义了方法,那么正确的function将被类型化为true。
1
| document.createElement('video').canPlayType |
所以上面返回一个函数。我们不需要一个函数,我们需要一个显式的布尔值,所以我们将它负两次,因为function不是错误的(0,null,false,empty string,nan),所以对于支持此方法的浏览器,它返回true。
1
| !!document.createElement('video').canPlayType // true |
如果不支持该方法,浏览器将返回undefined。!undefined为真,!true为假,因此!!document.createElement('video').LOL将返回false。
- document.createElement('video').canPlayType不会返回布尔值吗?或者是因为如果那是null,那么!!(null) = false?
- !!(空)==假
- @hunter-document.createElement('video').canPlayType将返回未定义的,如果浏览器不支持视频标记。
- …javascript很蠢…!null应该抛出一个异常…当当
双感叹号是一个javascript技巧,可以返回true/false,而不考虑输入。在您的示例中,如果浏览器不支持视频标记,它将返回未定义。!Undefined为真。所以!!Undefined为false。如果浏览器支持视频,它将返回true。!!!真的也是真的。这样可以避免处理未定义的情况。