tostring 和 valueOf 函数是解决值的显示和运算的问题 。所有的 Object 类型的数据都自带 toString 和 valueOf 函数 。
比如我们定一个 Object 类型数据:
const obj = {name: "duxin"}console.log(obj.valueOf()); // { name: 'duxin' }
toString()【一篇搞懂 toString函数与valueOf()函数】toString 函数的作用是把一个逻辑转换为字符串,并且返回 Object 类型数据的 toString()默认的返回值"[object Object]" 。
如果我们在定义对象的时候,可以重写 tosString 函数,这样 toString 的返回值可读性会更好一些 , 比如:
const obj = {name: "duxin",toString:function(){return this.name;}}console.log(obj.valueOf()); // { name: 'duxin' }console.log(obj.toString()); // duxin
以下这些函数都是有自定义的 toString 函数:
- Array 的 toString 函数返回值是以逗号分隔的字符串;
- Function 的 toString 函数返回值是函数自身的文本定义;
- Date 的 toString 函数返回值是时间字符串;
- Array的valueOf函数返回的值数组本身;
- Function的valueOf函数返回的是函数本身;
- Date的valueOf函数返回的值时间戳 。
- 引用数据类型转为String,先是调用toString函数,有值的话,就直接返回该字符串;如果对象没有toString,那就调用valueOf函数,然后将原始值转为字符串并且返回;如果toString或者valueOf都不能获取原始值,那就抛出类型转换异常;
var arr = [];arr.toString = function () {console.log('调用了toString()函数');return [];};arr.valueOf = function () {console.log('调用了valueOf()函数');return [];};console.log(String(arr));
在执行String(arr)的时候,是先将数组转为字符串,调用的是toString,它的结果不能转为string;那就调用valueOf函数,它的返回值也是一个空数组,也不能转为字符串,那就只能抛出类型转换异常了 。
- 引用类型在转化为number的时候,首先会判断对象是否含有valueOf函数,如果有,那就调用valueOf函数,把它的返回值转为数字,然后返回;如果没有valueOf函数,就调用toString函数,将返回值转为数字并返回 。如果toString或者valueOf都不能获取到原始值的话 , 那就抛出类型转换异常 。
推荐阅读
- 五分钟让你搞懂 Http 和 Https 协议的区别是什么?
- windows10u盘安装
- 一篇文章读懂ucas2022年申请流程
- 一篇学会 Rust 内存布局
- 匈奴、突厥、契丹、柔然、女真、鞑靼……现在全搞懂了
- 一文搞懂微服务架构演进
- 如何用秀米快速写出一篇推文,在秀米编辑器怎么复制推文的链接
- 如何写好一个公众号 怎么写一篇好的公众号文章
- 如何进行Redis性能优化?这一篇就够了
- airpods一代使用指南 我学会了什么写一篇文章