彻底了解toString和valueOf区别

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()能够很好的判断数据的类型及内置对象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章