我知道Boolean(),String()和Number()转换以及'' + ...
,!!...
和+...
转换方法。
我想知道是否有任何理由不使用函数构造函数?
答案 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:
答案 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"