首页 > 语言 > JavaScript > 正文

全面解析JavaScript中的valueOf与toString方法(推荐)

2024-05-06 14:56:07
字体:
来源:转载
供稿:网友

可以这样说,所有JS数据类型都拥有valueOf和toString这两个方法,null除外。它们俩解决javascript值运算与显示的问题。在程序应用非常广泛。下面我们逐一来给大家介绍下。

JavaScript 的 valueOf() 方法

valueOf() 方法可返回 Boolean 对象的原始值。

用法booleanObject.valueOf(),返回值为booleanObject 的原始布尔值。如果调用该方法的对象不是 Boolean,则抛出异常 TypeError。

<script type="text/javascript">var boo = new Boolean(false);document.write(boo.valueOf());</script>

以上脚本会输出false。

JavaScript 的 toString() 方法

toString() 方法可把一个逻辑值转换为字符串,并返回结果。

用法 booleanObject.toString(),返回值根据原始布尔值或者 booleanObject 对象的值返回字符串 "true" 或 "false"。如果调用该方法的对象不是 Boolean,则抛出异常 TypeError。

在 Boolean 对象被用于字符串环境中时,此方法会被自动调用。

下面脚本将创建一个 Boolean 对象,并把它转换成字符串:

<script type="text/javascript">var boo = new Boolean(true);document.write(boo.toString());</script>

脚本输出:true。

先看一例:

var aaa = {i: 10,valueOf: function() { return this.i+30; },toString: function() { return this.valueOf()+10; }}alert(aaa > 20); // truealert(+aaa); // 40alert(aaa); // 50

之所以有这样的结果,因为它们偷偷地调用valueOf或toString方法。但如何区分什么情况下是调用了哪个方法呢,我们可以通过另一个方法测试一下。由于用到console.log,请在装有firebug的FF中实验!

var bbb = {i: 10,toString: function() {console.log('toString');return this.i;},valueOf: function() {console.log('valueOf');return this.i;}}alert(bbb);// 10 toStringalert(+bbb); // 10 valueOfalert(''+bbb); // 10 valueOfalert(String(bbb)); // 10 toStringalert(Number(bbb)); // 10 valueOfalert(bbb == '10'); // true valueOfalert(bbb === '10'); // false

乍一看结果,大抵给人的感觉是,如果转换为字符串时调用toString方法,如果是转换为数值时则调用valueOf方法,但其中有两个很不和谐。一个是alert(''+bbb),字符串合拼应该是调用toString方法……另一个我们暂时可以理解为===操作符不进行隐式转换,因此不调用它们。为了追究真相,我们需要更严谨的实验。

var aa = {i: 10,toString: function() {console.log('toString');return this.i;}}alert(aa);// 10 toStringalert(+aa); // 10 toStringalert(''+aa); // 10 toStringalert(String(aa)); // 10 toStringalert(Number(aa)); // 10 toStringalert(aa == '10'); // true toString

再看valueOf。

var bb = {i: 10,valueOf: function() {console.log('valueOf');return this.i;}}alert(bb);// [object Object]alert(+bb); // 10 valueOfalert(''+bb); // 10 valueOfalert(String(bb)); // [object Object]alert(Number(bb)); // 10 valueOfalert(bb == '10'); // true valueOf            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选