2

我正在处理一些返回的 JSON 数据。

有时 JSON 会返回一些我可以通过

 var new_insert_id = data['internal']['new_insert_id'];

但有时这部分json数组数据根本不会返回,所以我需要跳过这个变量的设置。

因此,在尝试设置变量之前,我编写了一个简单的检查以确保此数据存在:

 if(typeof data['internal']['new_insert_id'] != 'undefined')
 {
     // if data['internal']['new_insert_id'] is defined, then..
     var new_insert_id = data['internal']['new_insert_id'];
 }

但是当 JSON 返回并且没有 new_insert_id 时,我收到以下错误:

Uncaught TypeError: Cannot read property 'new_insert_id' of undefined 

它指向的代码行是罪魁祸首是我的if语句行。

我错过了什么?我认为我的 if 语句会检查它是否存在,或者在使用数组时我需要做其他事情吗?

4

6 回答 6

4

除了可以先检查是否存在data['internal'],也可以使用pythonic的方式,即applytry/catch块:

try {
    var new_insert_id = data['internal']['new_insert_id'];
} catch (e) {}
于 2013-02-27T12:44:42.420 回答
2

您编写的语句检查new_insert_id属性是否存在于“内部”中,但它不检查“内部”是否存在于data变量中。这应该会更好:

if(typeof data['internal'] != 'undefined' && typeof data['internal']['new_insert_id'] != 'undefined')
{
     var new_insert_id = data['internal']['new_insert_id'];
}
于 2013-02-27T12:45:35.493 回答
2

错误消息说,这data['internal']已经是未定义的。你需要先检查一下:

if(typeof(data['internal']) != 'undefined' && typeof data['internal']['new_insert_id'] != 'undefined')
于 2013-02-27T12:45:36.553 回答
2

你需要先检查data['internal'] !== undefined:)

于 2013-02-27T12:45:38.973 回答
2

在您的测试中,您正在测试的属性是否未定义['new_insert_id']data['internal']那么您无法访问它,因为data['internal']未定义因此您得到的错误。

您必须首先检查是否data['internal']未定义。

于 2013-02-27T12:46:12.560 回答
2

我认为这是因为data['internal']未定义。

所以你需要先检查data['internal']

if(data['internal'] && data['internal']['new_insert_id'])
 {
     // if data['internal']['new_insert_id'] is defined, then..
     var new_insert_id = data['internal']['new_insert_id'];
 }
于 2013-02-27T12:46:18.913 回答