ValueOf()和toString()

var colors = ["red", "blue", "green"]; // 创建一个包含3 个字符串的数组
console.log(colors.toString()); // red,blue,green
console.log(colors.valueOf()); // red,blue,green
console.log(colors); // red,blue,green
/*valueOf和toString方法区别*/
var arr = [1, 2, 3];
/*判断是否为数组*/
console.log(Array.isArray(arr.valueOf())); //true
console.log(Array.isArray(arr.toString())); //false
/*
 *其实valueOf()调用完以后还是返回一个数组
 *这个数组被alert的时候会调用toString()函数
 *所以不是valueOf()和toString()函数相同,而是,根本就是间接的调用了toString()函数!
 */
arr.toString = function() {
    console.log("你调用了toString函数");
}
console.log(arr.valueOf());
console.log(arr.toString());
// 而对于数值,我们可以调用valueOf的时候直接可以获得数字进行计算,
// 不必转化成字符串,所以不会调用toString反言之,
// 如果我们需要获得操作对象的字符串形式的时候就会调用其toString函数
/*注:数字,只使用toString方法,当为字符串时,会自动调用valueof方法*/
var c = {
    i: 11111,
    valueOf: function() {
        console.log("你调用了c的valueOf函数");
        return this.i;
    },
    toString: function() {
        console.log("你调用了c的toString函数");
        return this.i;
    }
};
// 如果要求的是原始值那么就会调用valueOf,
// 如果要求的是字符串那么就会调用toString。
alert(+c);//valueOf
alert(c);//tostring

 函数的toString方法返回函数的源码。函数内部的注释也可以返回。

原文地址:https://www.cnblogs.com/NB-JDzhou/p/7120378.html