【发布时间】:2014-09-15 11:06:14
【问题描述】:
假设我从第 3 方来源解析 JSON 对象:
var myObject = {
person_list: [
{ black_hair: {
list: [
'bob',
'john',
'allen'
]}
}
]
};
但是如果结构突然改变或者数据响应可能损坏,我如何检查结构的深度部分是否存在?
我可以的
if ( myObject.person_list.black_hair.list !== undefined ) {
// do stuff
}
但在某些情况下,black_hair 可能不存在。如果对象中缺少它,那么我会得到一个Uncaught TypeError: Cannot read property 'list' of undefined。所以我能想到的检查整个结构是否完整的唯一方法是检查每个级别是否已定义:
if ( myObject.person_list !== undefined ) {
if ( myObject.person_list.black_hair !== undefined ) {
if ( myObject.person_list.black_hair.list !== undefined ) {
// do stuff
}
}
}
但这有点荒谬。有没有一种简单的方法可以在 JavaScript 中处理这个问题?是尝试,抓住最好的方法吗?
【问题讨论】:
-
你试过这个
if(myObject && myObject.peson_list && myObject.peson_list.black_hair && myObject.peson_list.black_hair.list){} -
你能用 jQuery.extend() 创建一个基层对象吗?这些值可能是空的,但至少它们不会是未定义的。这取决于您期望 myObject 有多大
-
其实你并不期望结构被破坏。所以我想说这是何时使用
try-catch语句的典型案例。否则你会检查太多的东西,可能你会忽略一些东西。如果person_list不是undefined而是null会怎样? -
这个问题是有缺陷的,因为
myObject.person_list.black_hair.list的给定结构是未定义的,因为black_hair不是person_list的属性。而是对象的属性,它是person_list数组中的第一个元素,因此该对象的实际“结构”是myObject.person_list[0].black_hair.list,因此如果测试@ 的结构,到目前为止给出的答案将正确产生false987654337@ -
@chiliNUT 好点!我已经更新了我的答案。
标签: javascript json javascript-objects