错误" Object.keys调用非对象"由空的json输出引起的

时间:2014-11-21 04:24:30

标签: javascript arrays json javascript-objects

我收到了错误Object.keys called on non-object。违规代码是;

numberOfEmployees = Object.keys(employee_data).length;

employee_data是一个json对象,它从Web服务获取json输出数据。仅当json输出为空[]时才会发生此错误。如果json输出不为空,则没有错误。代码有什么问题?

当json输出为空employee_data时,

undefined变为[]

1 个答案:

答案 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文档。