|
布尔值是基本数据类型,数值是不会有方法的;但它可以被打包成一个布尔对象,这时它就可以调用布尔对象中的方法了。布尔值可以隐式地被转换为布尔对象。
使用布尔对象的构造函数: boolObjectName = new Boolean(value) 当使用 new 运算符时,Boolean() 作为构造函数使用。此时它将参数 value 转换成一个布尔值,并返回一个包含该布尔值的布尔对象,此时 boolObjectName 是一个对象名,比如:var boolObjectName = new Boolean("hello");
document.write(typeof(boolObjectName), "<br>"); 最后输出结果为 object ,说明返回值是一个对象。
如果没有 new 运算符,那么 Boolean() 只是一个普通的函数,它仅仅只是将 value 参数转换成一个布尔值,并将该布尔值返回,此时 boolObjectName 是一个变量名,而不是一个对象。如果将上面代码中的 new 运算符去掉,那么可以看到输出结果为 boolean 。
注意:参数 value 如果是 0,NaN,null,undefined,空字符串时,都会被转换成 false ,而其他的字符串,数字,对象,数组等都会转换成 true (除了布尔值 false 本身之外)。
布尔对象主要有 3 个方法:
方法名 | 说明 | toString() | 将布尔对象转换为字符串 | valueOf() | 返回布尔对象中所存放的原始数据的布尔值 | toSource() | 返回布尔对象的源代码,该方法并非所有的浏览器都支持 |
toString() 将布尔对象转换成字符串。如果布尔值为真,那么就返回字符串 "true",反之返回字符串 "false" :var boolObjectName = Boolean("hello");
var chString = boolObjectName.toString();
document.write(chString, "<br>");
上面代码会输出 true 。
在调用 toString() 方法时,如果调用的对象不是布尔对象,那么就会抛出 TypeError 异常。
valueOf 返回布尔对象所存放的原始数据的布尔值,也就是构造函数中 value 转换成布尔类型后的值。该方法返回的是一个布尔类型的数据:var boolObjectName = Boolean("hello");
var boolVar = boolObjectName.valueOf();
document.write(boolVar, "<br>");
上面输出结果为 true 。
toSource() 方法返回一个字符串,字符串的内容为布尔对象的源代码,通常使用该方法来创建另一个对象。
如果直接使用内置的 Boolean 对象调用 toSource() 方法,如:var srcString = Boolean.toSource();
document.write(srcString); 那么返回的结果为:function Boolean() { [native code] } //火狐中可看到此结果,IE 和 Chrome 没有任何显示
这种返回结果不能用于创建另一个对象。
如果使用 Boolean 对象来调用 toSource() 方法,如:var boolObj = new Boolean("hello");
var srcString = boolObj.toSource();
document.write(srcString);
上面的代码输出结果为:(new Boolean(true))
因为这个结果是该对象的源代码,通过该源代码可以用来创建一个新的对象,比如: //定义一个布尔对象
var boolObj = new Boolean("hello");
//获取该布尔对象的源代码
var srcString = boolObj.toSource();
//输出源代码
document.write(srcString, "<br>");
var newObj = "var newObj = " + srcString;
document.write(newObj, "<br>");
//eval() 执行参数字符串所代表的语句
eval(newObj);
//输出 newObj 对象
document.write(newObj.valueOf());
上面代码的输出结果为:(new Boolean(true))
var newObj = (new Boolean(true))
true 从输出结果可以看到,newObj 对象相当于复制了 boolObj 对象。因此,它所代表的布尔值为 false 。
布尔值到布尔变量的隐式转换
布尔对象的作用是将布尔值打包成一个对象,以便在布尔对象中使用其方法。实际上,JavaScript 会隐式的对布尔值到布尔对象的转变,如://定义一个布尔变量
var boolVar = true;
//在布尔变量中使用 toString() 方法,会看到隐式转换
document.write(boolVar.toString(), "<br>");
//检查类型
document.write(typeof boolVar);
上面代码的输出结果为:因此我们注意到,这种转换只是临时的,在发生转换的地方的语句运行结束后,变量 boolVar 仍然是布尔型变量,而不是对象。 |
|