首页 > JavaScript > javascript valueOf() and toString()
2010二月21

javascript valueOf() and toString()

一直不是很清楚valueOf()与toString()的区别,平时也不太注意这些细节。http://bbs.51js.com/viewthread.php?tid=79935上面的总结感觉很是不错:

二者并存的情况下,在数值运算中,优先调用了valueOf,字符串运算中,优先调用了toString。

《javaScript 高级程序设计》一书中的描述如下:

toString()——返回对象的原始字符串表示

valueOf()——返回最适合该对象的原始值

前面两个示例均引用自http://bbs.51js.com/viewthread.php?tid=79935

<script type="text/javascript">
function Money(gold, silver, coin)
{
this.gold = gold;
this.silver = silver;
this.coin = coin;
}

Money.parse = function(value)
{
var coin = parseInt(value % 25);
var silver = parseInt(value / 25 % 20);
var gold = parseInt(value / 500);
return new Money(gold, silver, coin);
}

Money.prototype.valueOf = function()
{
return ((this.gold * 20) + this.silver) * 25 + this.coin;
}

Money.prototype.toString = function()
{
return this.gold + "两黄金," + this.silver + "两白银," + this.coin + "文钱";
}

var money1 = new Money(5, 6, 1);  //valueOf  (5*20+6)*25+1=2651
var money2 = new Money(2, 4, 6);  //valueOf  (2*20+4)*25+6=1106
var money3 = Money.parse(money1 + money2);// parse(3757) new Money(7,10,7)
alert(money3);
</script>
<script type="text/javascript">
function Money(n)
{
this.n = n;
}
Money.prototype.valueOf = function()
{
return this.n * 2
}
Money.prototype.toString = function()
{
return this.n * 3
}
var m1 = new Money(1); //对象默认返回的是toString()方法
var m2 = new Money(2); //对象默认返回的是toString()方法
m = m1 + m2; //涉及到数学运算,调用其valueOf()方法,所以返回2+4  6
alert(m1);
alert(m2);
alert(m);
</script>

Zakas 在其blog中出的js测试题中也有检测二者区别的题My JavaScript quiz

<script type="text/javascript">
var o = {
        x: 8,

        valueOf: function(){
         alert('xxx');
            return this.x + 2;
        },
        toString: function(){
         alert('yyy');
            return this.x.toString();
        }
    },
    result = o < "9"; //数学比较运算,调用valueOf()方法,返回的是 10 < "9" 字符串被转化为数字,为 10 < 9 所以是false
alert(o); //对象默认返回的是toString()方法,所以其值是8,准确的说是字符串"8"

alert(typeof(o.toString())); //返回string
</script>

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2010/02/21/1706/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

6 Responses to “javascript valueOf() and toString()”

  1. #1 Jutoy 回复 | 引用 Post:2010-02-22 14:06

    小小子新年 好哦~沙发拜年~

    [回复]

  2. #2 simaopig 回复 | 引用 Post:2010-02-22 14:08

    @Jutoy
    呵呵,一样,新年快乐。

    刚才还在想,为啥你的推友见面的文章里只有你的背景。记得小伙长的蛮帅的啊。呵。

    [回复]

  3. #3 Jutoy 回复 | 引用 Post:2010-02-22 14:11

    @simaopig
    呵呵,我拿着相机总不能照自己吧哈哈

    [回复]

  4. #4 simaopig 回复 | 引用 Post:2010-02-22 14:12

    @Jutoy
    呵呵。快回学校了吧?有假期真好啊。

    [回复]

  5. #5 Jutoy 回复 | 引用 Post:2010-02-22 14:14

    @simaopig
    嗯,马上要开学了,哎,也没剩下几个寒暑假期了~

    [回复]

  6. #6 simaopig 回复 | 引用 Post:2010-02-22 14:17

    @Jutoy
    呵呵。看看你大学的生活,感觉真是挺丰富精彩的。

    现在的我,只有后悔的份。呵。

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)