【问题标题】:Error "Object.keys called on non-object" caused by empty json output空 json 输出导致的错误“Object.keys called on non-object”
【发布时间】:2014-11-21 04:24:30
【问题描述】:

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

numberOfEmployees = Object.keys(employee_data).length;

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

当json输出为空[]时,employee_data变为undefined

【问题讨论】:

  • employee_data的值是怎么赋值的?
  • 发生错误时未定义
  • 好吧,你不能接受未定义的Object.keys()。它是如何变得未定义的? employee_data 是如何创建或分配的?如果 Web 服务返回未定义的 JSON,则可能意味着请求存在某种错误,因此您显然需要检测到该错误并执行所需的任何错误处理。
  • 当这个问题赢得了 1000 次浏览的热门徽章时,为什么我会对此问题投反对票?这个问题有什么问题?想知道以后避免在stackoverflow上提出不好的问题。

标签: javascript arrays json javascript-objects


【解决方案1】:

在非对象上调用的错误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 文档。

【讨论】:

  • 我猜你的意思是if(typeof emptyData == 'object')if(typeof emptyJSOn == 'object')
猜你喜欢
  • 2017-08-02
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2020-03-29
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多