首先valueOf和前两者最不同,因为数组使用它之后返回的是数组本身,依旧是一个数组。
在开发者工具里面进行验证:
var test=['a','b','c']
test
//(3) ["a", "b", "c"]
test.valueOf()
//(3) ["a", "b", "c"]0: "a"1: "b"2: "c"length: 3__proto__: Array(0)
test.valueOf() instanceof Array
//true
复制代码
其次是toString和toLocaleString的比较。
根据《JavaScript高级程序设计(第三版)》中的书写,两者的唯一不同就是前者调用的是每一项的toString()方法,后者调用的是toLocaleString()方法,也即是如果在函数内重新定义了的情况下的书写,但是书里没有写默认两种的区别在哪里。
如果是上面的这个数组test的话,两种方法转换出来的字符串是一模一样的:
test.toLocaleString()
//"a,b,c"
test.toString()
//"a,b,c"复制代码
根据博客小码农雯的这篇文章 ,进行对时间和数字的尝试:
时间:
var test2 = new Date();
test2.toString()
//"Mon Jul 30 2018 15:50:18 GMT+0800 (中国标准时间)"
test2.toLocaleString()
//"2018/7/30 下午3:50:18"复制代码
数字:
var test3=1234567890;
test3.toString();
//"1234567890"
test3.toLocaleString();
//"1,234,567,890"
复制代码
恩,基本与文章说的一致,两者的显示方式不同。
不过如果使用对象是数字的话,toString还有一个传入参数可以进制转换的功能:
test3.toString(2);
//"1001001100101100000001011010010"
test3.toLocaleString(2)
//"1,234,567,890"
复制代码
可以看到toLocaleString()还无法进行进制转换。