【问题标题】:Are booleans objects in JavaScript? [duplicate]JavaScript 中的布尔对象是什么? [复制]
【发布时间】:2012-08-15 23:13:04
【问题描述】:

在 JavaScript 中是布尔对象吗? JavaScript 中的“一切都是对象”是真的吗?

【问题讨论】:

标签: javascript boolean


【解决方案1】:

Primitives 不是对象,其他一切 (any standard object) 都是对象。然而,大多数原语(除了undefinednull 之外的所有)都有对应的对象。

所以

var a = false;

不是对象,而是

var b = new Boolean(false);

是。

由于两个对象仅在引用同一个对象时才相等,因此最好避免使用基元的对象版本:

a === false; // is true
b === false // is false   <- this is a problem

或者特别是对于布尔对象,将它们与任何布尔运算符一起使用都会产生意想不到的结果。对象引用的计算结果始终为true,因此使用b 的结果将是:

// remember
// a is the primitive value false
// b is a boolean object with value false

// NOT
!a // true
// but
!b // false

// AND
a && true // false
// but
b && true // true

无论如何,使用这些对象版本并没有真正的优势,因为当您尝试调用它们的方法时,JavaScript 是autoboxing 原语。这就是为什么调用如下:

var s = "HI THERE!".toLowerCase();
s = s.substring(0,2);

有可能。

【讨论】:

  • 但是,您几乎不需要对象包装的原语。
  • 有一个目的(虽然不是很有用:stackoverflow.com/a/856330/908879"...是将非布尔对象转换为布尔对象"
  • @ajax333221:确实,您确实可以使用它进行类型转换。在这种情况下,您也可以使用双重否定,例如!!"someString"。同样重要的是要注意,将Boolean(以及这些函数中的任何其他函数)作为函数或构造函数调用是有区别的。作为函数,它们都(?)返回原始值。
  • 不符合已经接受的答案和 +7 票,他一直在做很棒的编辑。如果每个人都像菲利克斯·弗林那样,世界可能就会和平,我们很可能会找到治愈当今大多数不治之症的方法
  • @ajax333221: 谢谢你的夸奖 :)
【解决方案2】:

布尔值、数字和字符串是类对象类型 - 它们有方法,但它们是不可变的。

【讨论】:

    猜你喜欢
    • 2012-10-07
    • 1970-01-01
    • 2017-12-31
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 2013-05-30
    相关资源
    最近更新 更多