Javascript中的布尔对象有什么实际用途?

Law*_*Dol 14 javascript

鉴于在JavaScript中

console.log("var F=new Boolean(false)")
console.log("( F != (F==false))",(( F != (F==false)) ? "TRUE" : "false"));
console.log("(!F != (F==false))",((!F != (F==false)) ? "TRUE" : "false"));
Run Code Online (Sandbox Code Playgroud)

打印:

( F != (F==false)) TRUE
(!F != (F==false)) TRUE
Run Code Online (Sandbox Code Playgroud)

这意味着在典型条件下布尔对象不是dop-in替代布尔基元,例如:

if(someBoolean) ...  // always true
if(!someBoolean) ... // always false
Run Code Online (Sandbox Code Playgroud)

JavaScript SetMap集合允许任何类型,包括基元.

特别是布尔对象有什么用处; 和一般表示其他原始类型的对象,因为它们在与它们相关的一致性方面有各种奇怪的东西?

注意:我具体询问用例(如果有的话)是什么,而不是它们与原始对应物的区别.

Ori*_*iol 19

布尔对象只是对象,因此是真实的.

console.log(!!new Boolean(true)); // true
console.log(!!new Boolean(false)); // true
Run Code Online (Sandbox Code Playgroud)

存在布尔对象,因为这样你就可以Boolean.prototype在原始布尔值上添加方法并将它们使用(它们将被包装在引擎盖下的booolean对象中).

Boolean.prototype.foo = function() {
  console.log("I'm the boolean " + this + "!!");
};
true.foo();
false.foo();
Run Code Online (Sandbox Code Playgroud)

当您想要在布尔值中存储属性时,它们也很有用.

var wrappedBool = new Boolean(false);
wrappedBool.foo = "bar";
console.log("Property foo: ", wrappedBool.foo); // "bar"
console.log("Unwrapped bool: ", wrappedBool.valueOf()); // false
Run Code Online (Sandbox Code Playgroud)

但那是不推荐的.