在javascript
中,我看到了
if (!!foo.bar) {
doSomething();
}
这与
之间的表现和其他差异是什么?if (Boolean(foo.bar)) {
doSomething();
}
使用构造函数类型转换是否有任何开销超过否定?
另一个(更好)的例子是:
doSomethingWithBoolean(!!foo.bar);
答案 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对象