最近在用node讀取文件中的json數據后,用JSON.parse()轉成了json,然后響應數據傳給前端,發現輸出值object對象時顯示[object object],在這里我們來看一下他的具體意思。
這篇文章是參考這里,很清楚的講解了為啥是 [object object]
它表示:[object 對象數據類型] ,在JavaScript中的所有事物都是對象:字符串、數字、數組、日期等等都是,在JavaScript中對象就是擁有屬性和方法的數據。對象的數據類型包括:基本數據類型:Undefined、Null、Boolean、Number、String以及復雜數據類型 數組、對象 。在輸出時將object轉換成String會執行object.prototype.toString(),若沒有進行過方法的重寫object.prototype.toString()輸出的格式就是[object 對象數據類型]。這就是他的由來。
那以此就可以用來判斷數據類型,object.prototype.toString.call() 方法就可以精確的判斷js對象的數據類型。
比如 我們定義了三個變量並輸出其數據類型:
var a = "hello world"; var b = []; var c = function(){}; console.log( object.prototype.toString.call( a ) ); console.log( object.prototype.toString.call( b ) ); console.log( object.prototype.toString.call( c ) ); //結果
[object String]; [object Array]; [object Function]; 因此 想要得到具體的類型可以字符串截取: console.log( object.prototype.toString.call( a ).slice( 8, -1) ); 結果: String
對於js中判斷對象數據類型還有其他兩種方法:typeof()和instanceof()。
下面是typeof()參數類型與對應的返回結果:
類型 | 結果 |
Undefined | "undefined" |
Null | "object"(見下文) |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Symbol (ECMAScript 6 新增) | "symbol" |
宿主對象(由JS環境提供) | Implementation-dependent |
函數對象([[Call]] 在ECMA-262條款中實現了) | "function" |
任何其他對象 | "object" |
instanceof
運算符用來測試一個對象在其原型鏈中是否存在一個構造函數的 prototype
屬性。語法:object(要檢測的對象) instanceof constructor (某個構造函數) 。示例如下:
/ 定義構造函數 function C(){} function D(){} var o = new C(); o instanceof C; // true,因為 Object.getPrototypeOf(o) === C.prototype
o instanceof D; // false,因為 D.prototype不在o的原型鏈上
o instanceof Object; // true,因為Object.prototype.isPrototypeOf(o)返回true
C.prototype instanceof Object // true,同上
以上就是我總結的對js中對象以及取值的一些理解。