徹底瞭解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()能夠很好的判斷數據的類型及內置對象

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