当前位置: 首页 > 面试题库 >

有人可以解释“双重否定”的把戏吗?

毛景曜
2023-03-14
问题内容

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

他说:

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

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

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


问题答案:

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

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

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

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

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

“假”值是:

  • false
  • NaN
  • undefined
  • null
  • "" (空字符串)
  • 0


 类似资料:
  • 问题内容: 我绝不是Javascript的专家,但是我一直在阅读Mark Pilgrim的“ Dive intoHTML5”网页,他提到了一些我想更好理解的内容。 他说: 最后,您使用双负数技巧将结果强制为布尔值(真或假)。 如果有人能更好地解释这一点,我将不胜感激! 问题答案: 逻辑NOT运算符会将值转换为与其逻辑值相反的布尔值。 第二个将先前的布尔结果转换回其原始逻辑值的布尔表示形式。 从这些

  • 问题内容: 当我将字符串值1和7存储到“ mykey”中时, redis中到底存储了 什么?以及getbit在redis中如何工作? 有人试图在该值内循环位吗? 我知道bitcount会给我2,但我也想从中获得确切的字符串值1和7,这可能吗? -- 我通过使用erlang redis客户端读取输出进行了一些实验。 erlang输出: 然后删除此条目: 我做同样的事情来偏移2 4 8,在这里您可以看

  • 问题内容: 越来越多地使用Python,并且不断看到在不同文件中设置的变量。有人可以解释这是什么吗? 问题答案: 这是该模块的公共对象的列表,由解释import 。它覆盖了默认的内容,即隐藏以下划线开头的所有内容。

  • 问题内容: 情况1:这不会引起?。谁能告诉我为什么这不会导致ConcurrentModificationException。 情况2:这是由于我尝试访问AsyncThread中的线程不安全的人员列表。我可以使我的“人员列表”实现是线程安全的,并且应该可以运行。 谁能解释我到底发生了什么。我无法理解这是如何解决问题的。 案例2是否将实现从更改为推荐? 添加例外: 05-28 20:34:21.073

  • 问题内容: 年复一年,我试图了解部分与内存模型和并发交易的Java规范。我不得不承认我失败了。是的,我了解锁和“同步”,wait()和notify()。我可以很好地使用它们,谢谢。对于“ volatile”的作用,我什至不清楚。但是所有这些都不是来自语言规范,而是来自一般经验。 这是我要问的两个示例问题。我对特定答案不太感兴趣,因为我需要了解答案是如何从规范中得出的(或者可能是我得出结论,规范没有

  • 问题内容: 好的,所以我试图制作一个可以处理.wav文件的程序,并且已经看到了这个问题/答案,但是我不确定是标题中的每个数据指的是什么。例如,“块”指的是什么?那是特定数量的位/字节吗? 如果有人能至少以本问题中使用的格式告诉我,除常量String Literals和’data’数组外,每个引用到.wav的数据是什么?特别是,我特别想知道什么是“块”,以及所有通道的采样率,字节率,每个采样的字节和