在javascript中使用a = b和a = !! b以及它们之间的差异

时间:2015-03-08 08:58:36

标签: javascript

我有以下代码来尝试使用直接分配和分配!!

var a = true,
    b = true;
a = b;
alert(a);
a = !!b;
alert(a);

它在使用或结果方面有区别吗? 我无法比较他们的每个结果

3 个答案:

答案 0 :(得分:1)

没有区别,本身。但我相信a = !!b效率稍差。 因为,首先它转换为false并再次转换为true

不知道这是否是微优化的情况,但a = b将是直截了当且更具可读性。

答案 1 :(得分:1)

!!x通常用作Boolean(x)的快捷方式。我只是进行了一点测试,双重否定的性能成本确实为零。即使指定的值不是常量,甚至当它不是一个布尔值时也是如此。布尔转换非常简单,基本上是免费的。

答案 2 :(得分:1)

它并没有什么不同。结果与直接比较的结果相同。

用例!!是: 很多时候,您希望针对布尔值检查非布尔值,或检查if条件中的值是true还是false。这正是你想要使用的时候!!。

什么!!确实如此,它首先否定变量的值,然后再次否定前一个否定中获得的值。

说...如果你这样使用它:

var str = "";
console.log(!!str);

这会给你布尔值false。

你应该用!!当您被要求严格检查条件的真实性时。 像这样:

if (true === !!str) {
    console.log('true');
} else {
    console.log('false');
}