首页 > 编程笔记 > JavaScript笔记
阅读:155
JS toString()和valueOf()的区别
在 JavaScript 中,由于绝大多数对象的原型链中继承 Object.prototype 原型对象(除非手动改变 prototype),所以它们都包含 Object.prototype 中的属性和方法,而 toString() 和 valueOf() 是比较重要的两个。
toString() 用于在需要字符串的地方,按方法内部的逻辑把对象转换成字符串,而 valueOf() 则用于在需要基本类型的地方,把对象按逻辑转换为基本类型。
toString() 一般需要被覆盖,因为 Object.prototype 中的 toString() 只是单纯地返回 [object Object],没有实际意义,通过覆盖 toString() 方法,在里边返回自定义的字符串,可以让它具有实际意义。
下方示例展示了覆盖 toString() 的方法,代码如下:
valueOf() 默认只会返回对象本身,它也需要通过覆盖来返回有意义的值。例如在上例的 obj 中,使用 valueOf() 返回 a+b 的数字基本类型的结果,代码如下:
toString() 用于在需要字符串的地方,按方法内部的逻辑把对象转换成字符串,而 valueOf() 则用于在需要基本类型的地方,把对象按逻辑转换为基本类型。
toString() 一般需要被覆盖,因为 Object.prototype 中的 toString() 只是单纯地返回 [object Object],没有实际意义,通过覆盖 toString() 方法,在里边返回自定义的字符串,可以让它具有实际意义。
下方示例展示了覆盖 toString() 的方法,代码如下:
const obj={
a:1,
b:2,
toString(){
return `a=${this.a},b=${this.b}`;
},
};
obj.toString(); //a=1,b=2
"对象字符串为"+obj; //对象字符串为a=1,b=2
上述代码中的 obj 在最后隐式地转换成了字符串,并调用了 toString() 方法生成了自定义的字符串。valueOf() 默认只会返回对象本身,它也需要通过覆盖来返回有意义的值。例如在上例的 obj 中,使用 valueOf() 返回 a+b 的数字基本类型的结果,代码如下:
const obj={
a:1,
b:2,
valueOf(){
return this.a+this.b;
},
};
obj.valueOf();//3
+obj; //3
obj-2; //1
注意:示例中的+obj同样返回了 valueOf() 的结果,因为一元加可以把非数字类型的值转换为数字类型,而在最后一行obj-2中,减法也需要操作数是数字类型,所以 obj 就调用了 valueOf() 方法隐式地转换成了数字。
ICP备案:
公安联网备案: