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

时间:2016-12-06 19:14:23

标签: 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"));

打印:

( F != (F==false)) TRUE
(!F != (F==false)) TRUE

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

if(someBoolean) ...  // always true
if(!someBoolean) ... // always false

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

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

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

2 个答案:

答案 0 :(得分:19)

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

console.log(!!new Boolean(true)); // true
console.log(!!new Boolean(false)); // true

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

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

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

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

但不建议这样做。

答案 1 :(得分:4)

说我们有......

var F = new Boolean(); 
var f = false;

F 对象 f 原语

对象由引用传递。基元通过 传递。

无论对象类型是什么,它始终保持其个性;身份。它的行为就像一个真实的(物质)物体,在宇宙中占据了自己独特的空间。

因此......

var Fn = new Boolean(); 

不等于'到F,即使与动态类型操作符进行比较' =='即使它们属于同一类型且具有相同的值:

Fn == F; 
>> false

那是因为(已经加下划线),它们是两个独立的&携带相同值的项目的不同对象,即。, false 。尽管如此 - 不一样 false

并且,因为没有类型转换(因为它们已经是相同类型),它们将通过引用进行比较 - 这显然指向两个单独的对象, 意思是: 它们不是同一个对象

我们应该将给定类型的JavaScript对象想象为专门用于携带某种类型的贵重物品的数据包。这种思维方式将使我们更容易理解我们工作中最意想不到的结果。这就是为什么 null 很漂亮。

实际值(可能已经)的用例,某个布尔对象可以携带两个值但保持相同(可识别)对象。唉,在JavaScript开发中,Boolean对象一直处于初始引入状态。现在几乎没用,只能用来确定这个错误:真正的价值来自不同的流程,而返回也是你比较它的那个。

问候。