关于valueOf与toString
x.valueOf
- 得到变量x的值
x.toString
- 得到变量x的字符串表示
区别
| 类型 | valueOf | toString |
|---|---|---|
| 数组[1,2,3] | (3)[1,2,3] | 1,2,3 |
| 对象obj | 对象及相关属性和方法 | [object Object] |
| Boolean类型 | Boolean值 | "true"或"false" |
| function | 函数本身 | function functionName(){code} |
| Number类型 | 数值 | 数值的字符串表示 |
以上Boolean和Number类型都是实例化对象而不是基本数据类型,只有对象才有方法
数组的toString()得到的结果和数组的join(',')得到的结果一样,如果数组元素含义null / undefined,则忽略该元素
<script>
let obj={a:1};
console.log(obj.valueOf()); //对象本身{a:1}+(包括对象上的相关属性方法)
console.log(obj.toString()); //[object Object]
console.log(obj); //对象本身 {a:1}(包括对象上的相关属性方法)
let obj1={a:1};
obj1.toString=function(){
return "toString"
}
obj1.valueOf=function(){
return "valueOf"
}
console.log(obj1.valueOf()); //valueOf
console.log(obj1.toString()); //toString
console.log(obj1); // { a: 1, toString: ƒ, valueOf: ƒ} 输出obj1上的属性和方法
let arr=[1,2,3];
console.log(arr.toString()); //1,2,3
console.log(arr.valueOf()); //(3) [1, 2, 3]
console.log(arr); //(3) [1, 2, 3]
</script>
数值运算中的调用
优先调用valueOf,不能正确转换成数值或字符串则再调用toString,都转换失败的话则输出NaN
<script>
function f() {}
let obj = new f();
console.log(obj.valueOf()); // f{}
console.log(obj.toString()); // [object Object] 字符串类型
console.log(obj + 1); // [object Object]1,调用了toString
console.log(obj - 1); //NaN
let arr=[1,2,3];
console.log(arr + 1);//'1,2,31'
</script>
总结
- valueOf:专用于计算
- toString:专用于转换为字符串形式