valueOf():返回最适合该对象类型的原始值;
toString(): 将该对象的原始值以字符串形式返回。

这两个方法一般是交由JS去隐式调用,以满足不同的运算情况。
在数值运算里,会优先调用valueOf(),在字符串运算里,会优先调用toString()。

let e2 = {n : 2,toString : function (){console.log('this is toString')return this.n},valueOf : function(){console.log('this is valueOf')return this.n*2}}alert(e2) //  2  this is toStringalert(+e2)  // 4 this is valueOfalert(''+e2) // 4 this is valueOfalert(String(e2)) // 2 this is toStringalert(Number(e2)) // 4 this is valueOfalert(e2 == '4') // true  this is valueOfalert(e2 === 4) //false ===操作符不进行隐式转换

第三个alert,之所以会调用valueOf是因为:在有运算操作符的情况下,valueOf的优先级高于toString

看接下来的两给例子:

let e3 = {n : 2,toString : function (){console.log('this is toString')return this.n}}alert(e3) //  2  this is toStringalert(+e3)  // 2 this is toStringalert(''+e3) // 2 this is toStringalert(String(e3)) // 2 this is toStringalert(Number(e3)) // 2 this is toStringalert(e3 == '2') // true  this is toStringalert(e3 === 2) //false  ===操作符不进行隐式转换
   Object.prototype.toString = null; let e4 = {n : 2,valueOf : function(){console.log('this is valueOf')return this.n*2}}alert(e4) //  4 this is valueOfalert(+e4)  // 4 this is valueOfalert(''+e4) // 4 this is valueOfalert(String(e4)) // 4 this is valueOfalert(Number(e4)) // 4 this is valueOfalert(e4 == '4') // true  this is valueOfalert(e4 === 4) //false  ===操作符不进行隐式转换

修改过的toString与ValueOf调用顺序

 哪个修改先调用哪个

总结:

  1. 进行对象转换时(alert(e2)),优先调用toString方法,如没有重写toString将调用valueOf方法,如果两方法都不没有重写,但按Object的toString输出。

  2. 进行强转字符串类型时将优先调用toString方法,强转为数字时优先调用valueOf。

  3. 在有运算操作符的情况下,valueOf的优先级高于toString。

浅析toString与valueOf相关推荐

  1. 26.JavaScript对象和基础类型之间的转换、hint、Symbol.toPrimitive、toString、valueOf

    文章目录 对象-基础类型转换 写在前面 对象类型转换规则 对象类型转换的结果 Hint String Number Default 转换需要的三个对象方法 Symbol.toPrimitive() t ...

  2. 通过char[]获得字符串new String(chars) || chars.toString() || String.valueOf(chars)对比

    今天刷Leecode49. 字母异位词分组,遇到一个通过char[]获得字符串的问题,记录一下new String(chars) || chars.toString() || String.value ...

  3. toString与valueOf区别

    对应视频分享:点击进入 基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null和undefined除外.它们俩解决javascript值运算与显示的问题, ...

  4. 彻底了解toString和valueOf区别

    toSring和valueof 两者都是对象的方法!前者返回对象的字符串,后者返回对象的原始值,如果没有原始值则返回对象本身! 1.toSring() 直接看代码 console.log((1).to ...

  5. 一文看懂JS里隐式转换、toString() 和 valueOf()

    js-看懂隐式转换toString 和 valueOf js隐式类型转换 数值类型和布尔类型的相加 字符串和数字相加 隐式类型转换隐藏一些错误 isNaN() 对象的隐式转换 强制类型转换 - &qu ...

  6. toString,toLocaleString,valueOf的不同

    首先valueOf和前两者最不同,因为数组使用它之后返回的是数组本身,依旧是一个数组. 在开发者工具里面进行验证: var test=['a','b','c'] test //(3) ["a ...

  7. JavaScript的toString()和valueOf()函数

    toString():返回当前对象的字符串形式. 该方法属于Object对象,但JavaScript的许多内置对象都重写了该函数,以实现更适合自身的功能需要. Array.toString(): 将数 ...

  8. 搞懂toString()与valueOf()的区别

    一.toString() 作用:toString()方法返回一个表示改对象的字符串,如果是对象会返回,toString() 返回 "[object type]",其中type是对象 ...

  9. 学习valueOf和toString,理解隐式转化规则

    js在比较运算过程中经常会发生隐式转换,常常会给人意料外的结果,而隐式转换在面试过程中又经常会被考到,所以打算好好整理一下隐式转换这个知识点,本文算是个人对隐式转换的学习梳理. 1.toString和 ...

  10. Javascript中的valueOf与toString

    基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下. t ...

最新文章

  1. android sql 顺序执行问题,怎么才能执行第一个完毕,才能继续执行第二个
  2. LINUX中断学习笔记【转】
  3. 技术系列课回顾 | 网易云信线上万人连麦技术大揭秘
  4. 【Mysql优化】索引覆盖
  5. drawitem设置指定行的背景颜色_Java 为 Excel 中的行设置交替背景色
  6. ESP32 coredump 分析
  7. 数据仓库入门(实验10)在Excel中查询层次结构
  8. exploring spring
  9. redis学习笔记---java操作redis,使用expire模拟指定时间段内限制ip访问的次数;
  10. 6-5.添加HLSL顶点着色
  11. conda安装cv2_『开发技术』Windows极简安装使用face_recognition实现人脸识别
  12. js实现浏览器打印PDF
  13. 终端安全检测和防御技术
  14. windows下如何安装tomcat并设置开机自启
  15. 牛逼的项目一定要有个牛逼的名字
  16. signature=c2533d7d1f3a9e27480c43aef903d102,2 AUTHORS, INCLUDING: Uwe Helmke
  17. 《模型轻量化-剪枝蒸馏量化系列》YOLOv5无损剪枝(附源码)
  18. C#检测网络连接状态
  19. 考研英语 - word-list-12
  20. amazon - amzreport 之 FBA Inventory Reports

热门文章

  1. 深入灵魂的共鸣 (《梦断代码》读后感)
  2. 58欧氏空间05——对称变换和对称矩阵、实对称矩阵的标准形、正交相似、实对称矩阵的正交相似对角化
  3. python模块:数字处理
  4. linux系统启动后卡在笑脸符号,【转】Linux中的特殊符号
  5. 力扣-62 不同路径
  6. elipse开发android 如何查看报错信息
  7. 1015 德才论 (25 分)—PAT (Basic Level) Practice (中文)
  8. Linux的uevent事件机制
  9. cmake--生成--动态库
  10. 转换器(Converter)——Struts 2.0中的魔术师