toSring和valueof 两者都是对象的方法!前者返回对象的字符串,后者返回对象的原始值,如果没有原始值则返回对象本身!
1.toSring()
直接看代码
console.log((1).toString());//1
console.log((10).toString(2))//1010
console.log(("1").toString());//1
console.log((false).toString());//false
console.log(({p:1}).toString());//[object,object]
console.log((undefined).toString());//报错
console.log((null).toString());//报错
console.log((function(){}).toString());//function(){}
console.log([1,2,3,4].toString());//1,2,3,4
console.log((new Date()).toString())//Fri Jul 03 2020 17:20:11 GMT+0800 (中国标准时间)
由于是对象的方法,所以必须要是对象,由于1,“”1“”之前上篇文章说下,他是实例化出来的对象,只不过包装对象自己内部做了处理,生命周期很短,但是它原型上仍然有toString方法,不懂的可以点击这里!数组的这里也有个坑,数组也是对象,为什么对象返回是[object,object],而数组返回的是对应的字符串,其实数组覆盖了Object.toString方法,然后将连接数组并返回一个字符串,其中包含用逗号分隔的每个数组元素(相当于Array.join())!
var test= Object.prototype.toString;
console.log(test.call(1));//[object Number]
console.log(test.call("1"));//[object String]
console.log(test.call(false));//[object Boolean]
console.log(test.call({p:1}));//[object object]
console.log(test.call(undefined));//[object undefined]
console.log(test.call(null));//[object null]
console.log(test.call(function(){}));//[object Function]
console.log(test.call([1,2,3,4]));//[object Array]
console.log(test.call(new Date()));//[object Date]
console.log(test.call(new RegExp()));//[object RegExp]
Object.prototype.toString.toString()能够很好的判断数据的类型及内置对象
2.vauleOf()
也先看代码吧
console.log((1).valueOf());//1
console.log((10).ValueOf(2))//报错
console.log(("1").valueOf());//1
console.log((false).valueOf());//false
console.log(({p:1}).valueOf());//{p:1}
console.log((undefined).valueOf());//报错
console.log((null).valueOf());//报错
console.log((function(){}).valueOf());//function(){}
console.log([1,2,3,4].valueOf());//[1,2,3,4]
console.log((new Date()).valueOf());//1593767848260
如果对象没有原始类型值就不作处理,直接返回对象本身!这里new Date()返回的是一堆数字,而toSring返回的是中文字符串!
总结:
1.toString()返回的是字符串,而valueOf()返回的是原始值,没有原始值返回对象本身
2.undefined和null都没有toString()和valueOf()方法
3.Date类型的toString()返回的表示时间的字符串;valueOf()返回的是现在到1970年1月1日的毫秒数
4.Number类型的toString()方法可以接收转换基数,返回不同进制的字符串形式的数值;而valueOf()方法无法接受转换基数
5.Object.prototype.toString.toString()能够很好的判断数据的类型及内置对象