布尔对象的意义是什么?

| 我正在阅读有关JavaScript的Mozilla手册,并在我的阅读布尔对象中谈到了这一点。我看不到它们有任何用途。他们有什么意思?为什么不只使用
true
false
? 顺便说一句,我一点也不了解Java,也不怕学习新知识,因此我为什么要学习JavaScript。我是一名PHP程序员,是一名后端人员,并且我想学习如何进行一些前端工作,因此我正在阅读《 Mozilla JavaScript指南》。     
已邀请:
因为这是(令人遗憾的)语言的定义方式-我怀疑它最初是为了性能/优化;请注意以下分配给“ 2”属性的情况。 (尽管Scala和Python在很大程度上拒绝了这种区别,但Java的工作原理与此类似)。 请注意,“ 3”不是唯一的“包装类型”。例如,还有
String
Number
。 因此,仍然存在许多怪癖(以下内容可能同样适用于布尔值):
typeof(\"foo\") // string
typeof(new String(\"foo\")) // object
\"foo\" instanceof String // false
new String(\"foo\") instanceof String // true

// result is undefined: a string is a primitive and silently \"ate\" the assignment
// this also makes it a much cheaper value as it\'s not a \"real\" object
x = \"f\"; x.bar = 42; x.bar

// result is 42: a String is a \"real\" object with real properties!
// however, this also means that it may have a good bit more overhead
x = new String(\"f\"); x.bar = 42; x.bar
我知道这不是问题的“答案”,而是把更多的木头扔在火上;-) 否则,唯一的真实“陷阱”是is7ѭ是真y值。 快乐的编码。     
JavaScript语言设计有很多尘土飞扬的角落,布尔值就是其中之一。实际上不使用它。 这个:
var a = [];
alert(a instanceof Array);
会告诉您“ true”。但是这个:
var b = true;
alert(b instanceof Boolean);
由于某种原因将显示\“ false \”。 简而言之:忘记它。     
创建一个新的布尔对象“基本上”会运行语句中的代码,然后从那里返回真正的布尔值。 从相同的文档:
1 var b = new Boolean(false);
2 if (b) // this condition evaluates to true
https://developer.mozilla.org/zh-CN/JavaScript/Guide/Statements#if...else_Statement     
也许是因为JavaScript对象以原语无法扩展的方式? (我只是在这里猜测,我从不需要布尔值。     
Boolean.prototype.bang = function() {
    return !this.valueOf();
}

true.bang(); // false
JavaScript中的所有内容都是一个对象。但同时我们也有原始元素。这真的很令人困惑,只是不要想太多。     
您可以使用
return Boolean(something)
从任何值强制为真或假,但编写but13ѭ会更短,这也会强制为真或假。     
从文档中:   不要混淆原始布尔值   值true和false与true   和布尔值的false   宾语。任何值不等于的对象   undefined,null,0,NaN或空   字符串,包括一个布尔对象   其值为false的结果为   传递给条件时为true   声明。 想象以下情况:
if(SomeBoolean){...}
在ѭ15是布尔对象的情况下为true。 反过来:
if(false){...}
永远是假的 附录进行澄清。
var someString = new Boolean(\"MyNonEmptyString\")
if(someString) //true
var otherString = new Boolean(\"\")
if(otherString) //false
    
在这里,我将不得不与大多数人保持一致,并不需要太多布尔对象,但是我确实想指出一些事情。 显式比较仍将像布尔值一样进行评估:
var someBool = new Boolean(false);
if (someBool == false)
    alert(\'Got here\'); //Alerts \'Got here\'
因此,您可以将其扩展到一个子类,并且仍然能够进行上述比较:
var classExtension = {
    toYN: function() {
        return this == false ? \'N\' : \'Y\';
    }
};

function getNewClass(val) {
    var newBool = new Boolean(val);
    jQuery.extend(newBool, classExtension);
    return newBool;
}

var newTest = getNewClass(false);
if (newTest)
    alert(\'It\\\'s alive\');
if (newTest == false)
    alert(\'And still a bool\');
alert(newTest.toYN());
这将提醒\'It's alive \',\'And a bool \'和\'N \'。 http://jsfiddle.net/fkJuk/ 但是,您真的需要吗?即使您这样做了,最好还是有一个自己的带有boolean属性的类来进行检查。最后,可能是为了保持一致性。每个原语都可以使用JavaScript直接访问构造函数和原型。     
回到规范(ECMA-262.pdf第151页),请注意,当将Boolean作为函数而不是构造函数调用时,它会进行类型转换。从而:
var t = 5
  , f = 0

console.log(Boolean(t))  //Prints true
console.log(Boolean(f))  //Prints false
当然,作为JavaScript对象,您可以使用\'new \'运算符将其用作原型,如其他人所指出的那样,但是我看不出这样做的任何理由。     

要回复问题请先登录注册