我有以下代码来尝试使用直接分配和分配!!
var a = true,
b = true;
a = b;
alert(a);
a = !!b;
alert(a);
它在使用或结果方面有区别吗? 我无法比较他们的每个结果
答案 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');
}