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都是重寫過的,只是單純地轉換成字符串並返回。