object之toString方法深入剖析

obj.toString()的結果和Object.prototype.toString.call(obj)的結果不一樣;

這是因爲Object本身有toString方法,能返回具體類型。

而Array ,function等類型作爲Object的實例,都重寫了toString方法。

這些對象類型調用toString方法時,根據原型鏈的知識,調用的是對應的重寫之後的toString方法,而不會去調用Object上原型toString方法。

所以採用obj.toString()不能得到其對象類型,只能將obj轉換爲字符串類型;因此,在想要得到對象的具體類型時,應該調用Object上原型toString方法。

var toString1=Object.prototype.toString;

var toString2={}.toString;

var bool=true;

var num=2;

var str="";

var fn=function(){};

var arr=[];

var date=new Date();

var reg=new RegExp();

var obj={};

console.log(bool.toString(), toString1.call(bool), toString2.call(bool)); console.log(num.toString(), toString1.call(num), toString2.call(num));

console.log(str.toString(), toString1.call(str), toString2.call(str));

console.log(fn.toString(), toString1.call(fn), toString2.call(fn));

console.log(arr.toString(), toString1.call(arr), toString2.call(arr));

console.log(date.toString(), toString1.call(date), toString2.call(date)); console.log(reg.toString(), toString1.call(reg), toString2.call(reg));

console.log(obj.toString(), toString1.call(obj), toString2.call(obj));

經測試,toString1 和 toString2作用是一樣的 說明純對象{}沒有重寫toString方法;而其他對象的toString都是重寫過的,只是單純地轉換成字符串並返回。

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