alert(obj) 顯示 [object Object] 是因為:
Object.prototype.toString 回傳格式 [object [[Class]]] 中的固定前綴,表示「這是一個物件」。function Obj() {}
var obj = new Obj();
alert(obj); // [object Object]
alert(Object.prototype.toString.call(obj)); // [object Object]
var arr = [1,2,3];
alert(arr); // 1,2,3 (Array 覆寫 toString)
alert(Object.prototype.toString.call(arr)); // [object Array]
var dt = new Date();
alert(Object.prototype.toString.call(dt)); // [object Date]
function typeOf(obj) {
return Object.prototype.toString.call(obj).slice(8, -1); // "Object", "Array", "Date", "RegExp"...
}
console.log(typeOf({})); // "Object"
console.log(typeOf([])); // "Array"
console.log(typeOf(null)); // "Null"
console.log(typeOf(undefined)); // "Undefined"
結論:[object Object] 只是預設 `toString()` 回傳格式,第一個 `object` 是固定字面量,第二個是內部類別標籤。