有没有理由做boolean cast !!而不是JavaScript中的Boolean()?

时间:2011-03-14 18:26:24

标签: javascript

我知道Boolean(),String()和Number()转换以及'' + ...!!...+...转换方法。

我想知道是否有任何理由使用函数构造函数?

6 个答案:

答案 0 :(得分:4)

一般来说,!!的使用通常是不受欢迎的,因为对于那些在实际目的之前没有看过它的人来说,这一点并不清楚。也就是说,它不到Boolean()字符的三分之一。

此外,我不确定您在Javascript中实际需要多长时间转换为布尔值,因为它经常被隐式转换,因为Javascript是弱类型的。

答案 1 :(得分:3)

对这些函数构造函数使用new运算符会对typeof运算符产生不可靠的影响。 (编辑:正如评论中所说,只有在使用new Boolean()代替Boolean()时才会这样做)

例如,

var f = new Boolean(true);
if(typeof(f)==="boolean") {//false, since its an object, not boolean
 ....
}

JavaScript Garden有一些很好的例子。

答案 2 :(得分:2)

我能想到7:

  1. 0
  2. 0
  3. ë
  4. 一个
  5. 名词

答案 3 :(得分:2)

不应该成为一个问题,但有人可以用自己的Boolean函数替换它们,这两种方式不相同。例如:

Boolean = function(x) {
    alert('Evil');
    return !x; // Oops
}

var x = 0;
console.log(!!x); // false
console.log(Boolean(x)); // true

这主要是理论上的差异,因为你不应该替换内置的构造函数,但这是一个区别。

由于名称查找和函数调用开销, 也可能是性能差异。在大多数情况下,我不会担心其中任何一个。只需使用您喜欢的任何版本。

答案 4 :(得分:1)

可能只是使用较少的字符,使脚本更紧凑。

答案 5 :(得分:0)

我发现使用new这些类型会导致容易混淆或棘手的错误:

var x = new Boolean(true);
console.log( x ); // true
console.log( typeof x ); // "object"

var y = new Boolean('false');
console.log( y ); // true
console.log( typeof y ); // "object"

var z = false;
console.log( z ); // false
console.log( typeof z ); // "boolean"