我收到了错误Object.keys called on non-object
。违规代码是;
numberOfEmployees = Object.keys(employee_data).length;
employee_data
是一个json对象,它从Web服务获取json输出数据。仅当json输出为空[]
时才会发生此错误。如果json输出不为空,则没有错误。代码有什么问题?
employee_data
时, undefined
变为[]
。
答案 0 :(得分:6)
在非对象上调用的错误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文档。