2

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

4

2 回答 2

8

基元不是对象,其他一切(任何标准对象)都是对象。然而,大多数原语(除了undefinedand之外的所有null)都有一个对象对应物。

所以

var a = false;

不是一个对象,而是

var b = new Boolean(false);

是。

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

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

或者特别是对于布尔对象,将它们与任何布尔运算符一起使用会产生意想不到的结果。对象引用的计算结果始终为true,因此 using 的结果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 会自动装箱原语。这就是为什么调用如下:

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

是可能的。

于 2012-08-15T23:14:33.047 回答
1

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

于 2012-08-15T23:16:48.113 回答