js中[object Object]與object.prototype.toString.call()


最近在用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中對象以及取值的一些理解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM