Boolean类型是与布尔值对应的引用类型。要创建Boolean对象,可以像下面这样调用Boolean构造函数并传入true或false值。
var booleanObject=new Boolean();
Boolean类型的实例重写了valueOf()方法,返回基本类型值true或false;重写了toString()方法,返回字符串“true”和“false”。可是,Boolean对象在ECMAScript中的用处不大,因为它经常会造成人们的误解。其中最常见的问题就是在布尔表达式中使用Boolean对象,例如:
var falseObject=new Boolean(); var result=falseObject && true; alert(result);//true var falseValue=false; result=falseValue && true; alert(result);//false
在这个例子中,我们使用false值创建了一个Boolean对象。然后,将这个对象与基本类型值true构成了逻辑与表达式。在布尔运算中,false && true 等于false。可是,实例中的这行代码是对falseObject而不是对它的值(false)进行求值。前面讨论过,布尔表达式中的所有对象都会被转换为true,因此falseObject对象在布尔表达式中代表的是true。结果,true && true当然就等于true了。
基本类型与引用类型的布尔值还有两个区别。首先,typeof操作符对基本类型返回“Boolean”,而对引用类型返回“Object”。其次,由于Boolean对象是Boolean类型的实例,所以使用instanceof操作符测试Boolean对象返回true,而测试基本类型的布尔值则返回false,例如:
alert(typeof falseObject);//object alert(typeof falseValue);//boolean alert(falseObject instanceof Boolean);//true alert(falseValue instanceof Boolean);//false
理解基本类型的布尔值与Boolean对象之间的区别非常重要,当然,我们的建议是永远不要用Boolean对象。
时间: 2024-11-10 07:06:14