valueOf和toString何时调用

valueOf 和 toString

所有数据类型中,除了null,其他的所有数据类型都有这两个东西。

当数字或对象需要隐式转换时,比如 == ,此时会用到对象上面的 toString(), **valueOf()**方法转换。

通常valueOf是负责将对象转换成它的原始值,本身就是原始值时,则valueOf将返回对象本身。

toString主要用于展示,将对象或者基本类型的值转换成字符串。object.toString() 得到的是 [Object, Object]

Date() 对象是个意外,Date.valueOf()会返回1970年到现在的时间戳,是一个数字。

toString和valueOf的优先级
  • 正常情况下,先掉用toString
  • 当存在运算符时,优先调用valueOf
  • 当发现value运算不了时,还是会再次调用tostring

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf

== 的比较方式

  • 当两边数据类型相同时,直接比较两边的数据是否相等,并且指向的内存也要相等**[] == [] // false**
  • 当两边数据类型不同时,先做类型转换,
    • 当两边都是值类型时,将两边都转换成数字比较。Number(值类型) == Number(值类型)
    • 当两边有的是引用类型时,调用它的valueOf方法,将引用类型转换成值类型,再比较。如果调用valueOf后发现依然不是原始类型,调用它的toString后,再比较。如果都不能变成原始值,就报错TypeError
      • 当引用类型和数字相比较时,将引用类型转成数字,再比较
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值