前端--JavaScript学习笔记(valueOf与toString)

145 阅读1分钟

关于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:专用于转换为字符串形式