使用toString()和valueOf()获取值时的区别

一般我们都是使用toString()来将数据转换为字符串的,但其实toString()和valueOf()都是用来获取值的,那它们有什么区别呢?我们通过下面这个例子来理解一下。

首先,有下面这样一个对象o:

      var o = {
        a: 1,
        valueOf: function () {
          console.log("aaa");
          return ++this.a;
        },
        toString: function () {
          console.log("bbb");
          return "3";
        },
      };

1、如果我们直接打印对象o

console.log(o);

结果是打印结果
看起来和普通的对象没有区别。

2、如果我们执行下面的操作:

      console.log(o==2);
      console.log(o==3);
      console.log(o==4);

结果会是先后打印3次 “aaa” 和 true ,
这说明这三次的打印过程中,都执行了对象o的valueOf方法。

3、如果我们进行下面的运算:

      console.log(o + 1);

结果会是先打印 “aaa” ,再打印 3 。
这说明打印过程中执行了对象o的valueOf方法。

如果我们进行的运算是:

      console.log(o + "1");

结果会是先打印 “aaa” ,再打印 “21” 。
这也说明打印过程中执行了对象o的valueOf方法。


为什么会出现上面的结果呢?

其实这里toString()和valueOf()的调用规则如下:

1、强制转换数值时调用valueOf()
2、强制转换字符时调用toString()
3、隐式转换时调用valueOf(),返回valueOf()方法return的值

当我们使用==、+等运算符时其实都是在进行运算,而运算,这时就会调用的时候就会进行隐式转换,从而调用对象o的valueOf方法。

而强制转换我们分别执行下面的语句,根据相应的打印结果就可以证明了。

      console.log(String(o)); //先打印"bbb",再打印"3"
      console.log(Number(o)); //先打印"aaa",再打印2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值