布尔对象有什么意义?

Mar*_*lin 26 javascript boolean

我正在阅读关于JavaScript的Mozilla手册,我在阅读布尔对象时谈到了这一点.我看不到他们的一个用途.他们有什么意义?你为什么不使用truefalse

顺便说一句,我根本不懂Java,我不怕学习新东西,因此我为什么要学习JavaScript.我是一名PHP程序员,后端人员,我想学习如何做一些前端工作,所以我正在阅读Mozilla JavaScript指南.

小智 13

因为(有点可悲)这是如何定义语言的 - 我怀疑它最初是为了性能/优化; 请注意分配给string下面的财产的情况.(Java的工作方式类似,尽管Scala和Python在很大程度上拒绝了这种区别).

请注意,这Boolean不是唯一的"包装类型".也有StringNumber,例如.

因此,仍存在许多怪癖(下面的内容可能同样适用于布尔值):

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
Run Code Online (Sandbox Code Playgroud)

我知道这并没有"回答"这个问题,而是在火上扔了一些木头;-)

从上面来看,唯一真正的"问题"可能new Boolean(false)是真值y值.

快乐的编码.


c-s*_*ile 10

JavaScript语言设计有很多尘埃落定的角落,而布尔就是其中之一; 它没有在实践中使用.

这个:

var a = [];
alert(a instanceof Array);
Run Code Online (Sandbox Code Playgroud)

会告诉你"真实".但是这个:

var b = true;
alert(b instanceof Boolean);
Run Code Online (Sandbox Code Playgroud)

由于某种原因将显示"虚假".

简而言之:忘了它.

  • 这不仅仅是"某种原因",原因是`true`是原始的,而`Boolean`是对象.它与`1 instanceof Number == false`相同 (4认同)

Def*_*all 6

创建一个新的布尔对象"基本上"运行语句中的一些代码,然后从那里返回真正的布尔值.

来自相同的文档:

1 var b = new Boolean(false);
2 if (b) // this condition evaluates to true
Run Code Online (Sandbox Code Playgroud)

https://developer.mozilla.org/en/JavaScript/Guide/Statements#if...else_Statement


Pau*_*lin 5

也许是因为JavaScript对象可以通过原语不可扩展的方式进行扩展?(我只是在这里猜测,我从来不需要布尔值.


Ray*_*nos 5

Boolean.prototype.bang = function() {
    return !this.valueOf();
}

true.bang(); // false
Run Code Online (Sandbox Code Playgroud)

JavaScript 中的一切都是对象。但同时我们也有原语。确实很混乱,别想太多。