2014-11-21 2 views
1

Я получил ошибку Object.keys called on non-object. Нарушающий код;Ошибка «Object.keys, вызванные не-объектом», вызванные пустым выводом json

numberOfEmployees = Object.keys(employee_data).length; 

employee_data является объект JSON, который получает назначение выходных данных JSON из веб-службы. Эта ошибка возникает только тогда, когда выход json пуст []. Если выход json не пуст, ошибки не возникает. Что не так с кодом?

employee_data будет undefined когда выход json пуст [].

+0

Какое значение присвоено 'employee_data'? – thefourtheye

+0

Неисправность при возникновении ошибки – user781486

+0

Ну, вы не можете взять 'Object.keys()' из неопределенного. Как это получилось неопределенным? Как создается или назначается 'employee_data'? Если веб-служба вернула неопределенный JSON, это, вероятно, означает, что с запросом была какая-то ошибка, поэтому вам, очевидно, необходимо ее обнаружить и выполнить любую обработку ошибок. –

ответ

5

Ошибка Object.keys, вызываемая не-объектом, может возникать только при помещении в нее объекта non. Ниже в 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

+0

Ohh !! да, спасибо, что указали это, просто обновили .. – RE350

Смежные вопросы