当前位置: 首页 > 编程笔记 >

JavaScript 双重否定(!! x)

司徒河
2023-03-14
本文向大家介绍JavaScript 双重否定(!! x),包括了JavaScript 双重否定(!! x)的使用技巧和注意事项,需要的朋友参考一下

示例

双重否定!!不是唯一的JavaScript运算符,也不是特殊的语法,而仅仅是两个否定的序列。它用于将任何类型的值转换为适当的值true或false布尔值,具体取决于它是true还是falsy

!!1            // 真正
!!0            // 假
!!undefined    // 假
!!{}           // 真正
!![]           // 真正

首先否定任何值转换为false它是否truthy以及true如果是falsy。然后,第二个否定运算将对普通布尔值进行运算。他们一起转换任何truthy值true和任何falsy价值false。

但是,许多专业人士认为使用这种语法的做法是不可接受的,因此即使编写的时间更长,也建议阅读起来更简单:

x !== 0        // 如果x是数字,则代替!! x
x != null      // 如果x是html" target="_blank">对象,字符串或未定义,则代替!! x

!!x由于以下原因,使用的做法被认为是不好的做法:

  1. 从样式上看,它可能看起来像一种独特的特殊语法,而实际上,除了使用隐式类型转换的两个连续的否定之外,它没有做任何其他事情。

  2. 最好通过代码提供有关存储在变量和属性中的值的类型的信息。例如,x !== 0表示x可能是数字,而!!x不会向代码阅读者传达任何此类优势。

  3. 用法的使用Boolean(x)允许类似的功能,并且是类型的更明确的转换。

 类似资料:
  • 问题内容: 我遇到了这段代码 忍不住想知道为什么双重否定?有没有其他方法可以达到相同的效果? 问题答案: 它转换为布尔值。第一个取反一次,转换值如下: 至 至 至 至 至 至 至 所有其他表达式 然后其他人再次否定它。简明投地布尔,完全等同于ToBoolean仅仅是因为被定义为它的否定。但是,这里没有必要,因为它仅用作条件运算符的条件,条件运算符将以相同的方式确定真实性。

  • 可能重复: 什么是错误!!(不是)JavaScript中的运算符? 我遇到了这段代码 我不禁想知道为什么双重否定?有没有其他方法可以达到同样的效果? (代码来自https://github.com/eriwen/javascript-stacktrace/blob/master/stacktrace.js)

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

  • 问题内容: 我偶然遇到了一篇文章,该文章最近讨论了Java中的双重检查锁定模式及其陷阱,现在我想知道我多年来使用的那种模式的变体是否会遇到任何问题。 我看过许多关于该主题的文章和文章,并了解了对部分构造的对象的引用所带来的潜在问题,据我所知,我认为我的实现不受这些问题的影响。以下模式是否有问题? 而且,如果没有,人们为什么不使用它?在围绕此问题进行的任何讨论中,我从未见过推荐它的方法。 问题答案:

  • 出于好奇和增加知识,我想在dom元素和javascript变量之间实现某种双向数据绑定。 我很幸运,在这里@stackoverflow找到了一个很好的答案,解决了我一半的问题,这就引出了这个要点https://gist.github.com/384583,但我仍然无法100%完成这件事。 下面是我的代码示例:http://jsfiddle.net/bpH6Z/ 如果您尝试运行fiddle并单击“查

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