一尘不染

有人可以解释这个“双重否定”的把戏吗?[重复]

javascript

我绝不是Javascript的专家,但是我一直在阅读Mark Pilgrim的“ Dive intoHTML5”网页,他提到了一些我想更好理解的内容。

他说:

最后,您使用双负数技巧将结果强制为布尔值(真或假)。

function supports_canvas() {
  return !!document.createElement('canvas').getContext;
}

如果有人能更好地解释这一点,我将不胜感激!


阅读 266

收藏
2020-05-01

共1个答案

一尘不染

逻辑NOT运算符!会将值转换为与其逻辑值相反的布尔值。

第二个!将先前的布尔结果转换回其原始逻辑值的布尔表示形式。

从这些逻辑非运算符的文档中:

如果可以将单个操作数转换为true,则返回false;否则,返回false。否则,返回true。

因此,如果getContext给您一个“假”值,!! 它将使它返回布尔值false。否则它将返回true

“假”值是:

  • false
  • NaN
  • undefined
  • null
  • "" (空字符串)
  • 0
2020-05-01