Boolean(foo.bar)和!! foo.bar有什么区别?

时间:2013-07-24 07:20:14

标签: javascript boolean negation

javascript中,我看到了

的用法
if (!!foo.bar) {
    doSomething();
}

这与

之间的表现和其他差异是什么?
if (Boolean(foo.bar)) {
    doSomething();
}

使用构造函数类型转换是否有任何开销超过否定?

另一个(更好)的例子是:

doSomethingWithBoolean(!!foo.bar);

4 个答案:

答案 0 :(得分:1)

我认为不存在任何重大的性能问题。 !! foo.bar 以更少的打字方式做同样的事情。

使用布尔(foo.bar)可能会出现非常小的性能问题,因为这是使用构造函数,但今天的硬件是可忽略的。

毕竟我只会使用 foo.bar !foo.bar

答案 1 :(得分:0)

双重否定只是更快地输入并缩短文件。这是一种常见的压缩技术。

它可能(一点点)慢,但由于它是无处不在的快捷方式,我猜有一个编译器优化。不要挑剔这些实施细节!

答案 2 :(得分:0)

通过调用Boolean(foo.bar),您将获得一个包装的布尔对象,该对象具有一些额外的特定于对象的特定功能(在这里您不需要它们)

使用!!foo.bar你会得到一个布尔文字,所以我认为这个评估会很快。

答案 3 :(得分:-2)

在Javascript中,

if (Boolean(foo.bar)) {
    doSomething();
}

doSomething将执行,因为Boolean()创建一个非null对象,即使它是Boolean(false)。 “Boolean”返回一个对象,“!!”返回布尔值,例如真假。我的来源是here

PS:布尔,在开头有一个大写,是Javascript对象