曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 2794|回复: 0
打印 上一主题 下一主题

布尔对象

[复制链接]

716

主题

734

帖子

2946

积分

超级版主

Rank: 9Rank: 9Rank: 9

积分
2946
跳转到指定楼层
楼主
发表于 2013-4-17 00:56:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
布尔值是基本数据类型,数值是不会有方法的;但它可以被打包成一个布尔对象,这时它就可以调用布尔对象中的方法了。布尔值可以隐式地被转换为布尔对象。

使用布尔对象的构造函数:
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);
上面代码的输出结果为:
true
boolean
因此我们注意到,这种转换只是临时的,在发生转换的地方的语句运行结束后,变量 boolVar 仍然是布尔型变量,而不是对象。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-11-1 07:29 , Processed in 0.070344 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表