2014-11-21 21 views
1

我收到一個錯誤Object.keys called on non-object。有問題的代碼是;由於空json輸出引起的「Object.keys在非對象上調用」錯誤

numberOfEmployees = Object.keys(employee_data).length; 

employee_data是一個json對象,它從Web服務獲取分配的json輸出數據。這個錯誤只發生在json輸出爲空時[]。如果json輸出不爲空,則不會出現錯誤。代碼有什麼問題?

employee_data當json輸出爲空時變成undefined[]

+0

如何賦值給'employee_data'? – thefourtheye 2014-11-21 04:44:07

+0

錯誤發生時未定義 – user781486 2014-11-21 04:54:58

+0

那麼,你不能採取未定義的'Object.keys()'。它是如何被定義的?如何創建或分配'employee_data'?如果Web服務返回未定義的JSON,則可能意味着請求中存在某種錯誤,所以您顯然需要檢測該錯誤並執行所需的任何錯誤處理。 – 2014-11-21 05:54:28

回答

5

在非對象上調用的錯誤Object.keys只能在將非對象放入它時發生。見https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

return function(obj) { 
     if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) { 
     throw new TypeError('Object.keys called on non-object'); 
     } 

下面你測試的是employee_data的值時,它是空的。它應該適用於[]

但是,如果您已撥打JSON.stringify就可以了,否則就無法工作,請參閱下文。

var emptyData = []; 
if(typeof emptyData == 'object') 
    console.log(Object.keys(emptyData)); // it will print the keys,if there 

var emptyData = []; 
var emptyJSOn = JSON.stringify(emptyData); 
if(typeof emptyJSOn == 'object') 
    console.log(emptyJson); // it won't print because ,it's not an object. 

現在,我想你正試圖通過,emptyJson到Object.keys()方法,這就是爲什麼你收到此錯誤。

欲瞭解更多信息,你可以參考MDN文檔。

+0

我想你的意思是'if(typeof emptyData =='object')''if(typeof emptyJSOn =='object')' – JFK 2014-11-21 05:31:01

+0

哦!是的,謝謝你指出,只是更新.. – RE350 2014-11-21 05:33:02

相關問題