【问题标题】:double exclamation on a return value in javascript [duplicate]javascript中返回值的双重感叹号[重复]
【发布时间】:2011-05-29 14:25:22
【问题描述】:

我正在查看一本关于 html 5 的书,其中包含一些 js。双感叹号是什么意思?

return ! ! document.createElement('video').canPlayType;

【问题讨论】:

  • 喜欢它,双重否定在编程语言中很有用。我的英语老师说永远不要使用双重否定。 “我什么都不想做。”变成一个现在可能有意义的句子。 :)
  • 我可能是在询问之前先尝试搜索stackoverflow。 stackoverflow.com/questions/784929/…
  • 对此感到抱歉。我在“双感叹号 javascript”下进行了搜索,没有找到任何内容。

标签: javascript


【解决方案1】:

! 运算符取反,辅助! 取反初始取反的结果。这基本上将右侧的任何内容类型转换为布尔值( 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 - 如果浏览器不支持 video 标签,document.createElement('video').canPlayType 将返回 undefined。
  • ... javascript 很笨... !null 应该抛出异常... dangit
【解决方案2】:

双感叹号是一种 JavaScript 技巧,无论输入如何都返回真/假。在您的示例中,如果浏览器不支持 video 标签,它将返回 undefined。 !undefined 是真的。所以 !!undefined 是假的。如果浏览器确实支持视频,它将返回 true。 !!真实也是真实的。这使您不必处理未定义的情况。

【讨论】:

    猜你喜欢
    • 2012-03-06
    • 2017-10-08
    • 2017-01-05
    • 1970-01-01
    • 2018-03-18
    • 2018-01-21
    • 2012-07-07
    • 2015-06-01
    • 2018-06-04
    相关资源
    最近更新 更多