浅析toString与valueOf
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调用顺序
哪个修改先调用哪个
总结:
进行对象转换时(alert(e2)),优先调用toString方法,如没有重写toString将调用valueOf方法,如果两方法都不没有重写,但按Object的toString输出。
进行强转字符串类型时将优先调用toString方法,强转为数字时优先调用valueOf。
在有运算操作符的情况下,valueOf的优先级高于toString。
浅析toString与valueOf相关推荐
- 26.JavaScript对象和基础类型之间的转换、hint、Symbol.toPrimitive、toString、valueOf
文章目录 对象-基础类型转换 写在前面 对象类型转换规则 对象类型转换的结果 Hint String Number Default 转换需要的三个对象方法 Symbol.toPrimitive() t ...
- 通过char[]获得字符串new String(chars) || chars.toString() || String.valueOf(chars)对比
今天刷Leecode49. 字母异位词分组,遇到一个通过char[]获得字符串的问题,记录一下new String(chars) || chars.toString() || String.value ...
- toString与valueOf区别
对应视频分享:点击进入 基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null和undefined除外.它们俩解决javascript值运算与显示的问题, ...
- 彻底了解toString和valueOf区别
toSring和valueof 两者都是对象的方法!前者返回对象的字符串,后者返回对象的原始值,如果没有原始值则返回对象本身! 1.toSring() 直接看代码 console.log((1).to ...
- 一文看懂JS里隐式转换、toString() 和 valueOf()
js-看懂隐式转换toString 和 valueOf js隐式类型转换 数值类型和布尔类型的相加 字符串和数字相加 隐式类型转换隐藏一些错误 isNaN() 对象的隐式转换 强制类型转换 - &qu ...
- toString,toLocaleString,valueOf的不同
首先valueOf和前两者最不同,因为数组使用它之后返回的是数组本身,依旧是一个数组. 在开发者工具里面进行验证: var test=['a','b','c'] test //(3) ["a ...
- JavaScript的toString()和valueOf()函数
toString():返回当前对象的字符串形式. 该方法属于Object对象,但JavaScript的许多内置对象都重写了该函数,以实现更适合自身的功能需要. Array.toString(): 将数 ...
- 搞懂toString()与valueOf()的区别
一.toString() 作用:toString()方法返回一个表示改对象的字符串,如果是对象会返回,toString() 返回 "[object type]",其中type是对象 ...
- 学习valueOf和toString,理解隐式转化规则
js在比较运算过程中经常会发生隐式转换,常常会给人意料外的结果,而隐式转换在面试过程中又经常会被考到,所以打算好好整理一下隐式转换这个知识点,本文算是个人对隐式转换的学习梳理. 1.toString和 ...
- Javascript中的valueOf与toString
基本上,javascript中所有数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下. t ...
最新文章
- android sql 顺序执行问题,怎么才能执行第一个完毕,才能继续执行第二个
- LINUX中断学习笔记【转】
- 技术系列课回顾 | 网易云信线上万人连麦技术大揭秘
- 【Mysql优化】索引覆盖
- drawitem设置指定行的背景颜色_Java 为 Excel 中的行设置交替背景色
- ESP32 coredump 分析
- 数据仓库入门(实验10)在Excel中查询层次结构
- exploring spring
- redis学习笔记---java操作redis,使用expire模拟指定时间段内限制ip访问的次数;
- 6-5.添加HLSL顶点着色
- conda安装cv2_『开发技术』Windows极简安装使用face_recognition实现人脸识别
- js实现浏览器打印PDF
- 终端安全检测和防御技术
- windows下如何安装tomcat并设置开机自启
- 牛逼的项目一定要有个牛逼的名字
- signature=c2533d7d1f3a9e27480c43aef903d102,2 AUTHORS, INCLUDING: Uwe Helmke
- 《模型轻量化-剪枝蒸馏量化系列》YOLOv5无损剪枝(附源码)
- C#检测网络连接状态
- 考研英语 - word-list-12
- amazon - amzreport 之 FBA Inventory Reports