0

我必须访问对象的属性:

var jsonobj= {
    "first": {
        "second": 120
    }
}

如何检查是否second可用?如果我们在这里检查,则jsonobj.hasOwnProperty()返回。false

如果我想将值second从 120 更改为 100,我该如何实现呢?我可以得到一个通用的解决方案,以便它适用于任意数量的层次结构吗?

编辑:如果我不知道房产名称怎么办?

4

4 回答 4

2

如果您想检查嵌套属性 [key] 的 [唯一路径] 是否存在,此功能可能会有所帮助:

function keyPathExists(obj,keypath){
  var keys = keypath.split('.'), key, trace = obj;
  while (key = keys.shift()){
    if (!trace[key]){
      return null
    };
    trace = trace[key];
  }
  return true;
}

//usages
var abcd = {a:{b:{c:{d:1}}}};
keyPathExists(abcd,'a.b.c.d'); //=> 1
keyPathExists(abcd,'a.b.c.d.e'); //=> null
if (keyPathExists(abcd,'a.b.c.d')){
 abcd.a.b.c.d = 2;
}

请仔细阅读@nnnnnn的评论,尤其是其中提供的链接

于 2012-09-10T06:33:25.923 回答
0

使用typeof

if(typeof jsonobj.first == 'undefined'){
    jsonobj.first = {};
}
if(typeof jsonobj.first.second == 'undefined'){
    jsonobj.first.second = {};
}    
jsonobj.first.second = 100;
于 2012-09-10T06:16:00.923 回答
0

要更改值,您可以使用“点”表示法 - 所以尝试:jsonobj.first.second = 100

于 2012-09-10T06:16:13.007 回答
0
var jsonobj= {
              "first": {
                           "second": 120
                        }
           }

alert(jsonobj.first.second);

jsonobj.first.second = 100

alert(jsonobj.first.second);​
于 2012-09-10T06:17:12.617 回答