Javascript 访问对象的嵌套属性

Javascript 访问对象的嵌套属性,javascript,jquery,Javascript,Jquery,我必须访问对象上的属性: var jsonobj= { "first": { "second": 120 } } 如何检查second是否可用jsonobj.hasOwnProperty()如果我们选中此处,则返回false 如果我想将second的值从120更改为100,我该如何实现? 我可以得到一个通用的解决方案,这样它可以适用于任意数量的层次结构吗 编辑: 如果我不知道属性的名称怎么办?使用typeof: if(typeof jsonobj.first =

我必须访问对象上的属性:

var jsonobj= {
    "first": {
        "second": 120
    }
}
如何检查
second
是否可用
jsonobj.hasOwnProperty()
如果我们选中此处,则返回
false

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

编辑
如果我不知道属性的名称怎么办?

使用
typeof

if(typeof jsonobj.first == 'undefined'){
    jsonobj.first = {};
}
if(typeof jsonobj.first.second == 'undefined'){
    jsonobj.first.second = {};
}    
jsonobj.first.second = 100;

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

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

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

alert(jsonobj.first.second);

jsonobj.first.second = 100

alert(jsonobj.first.second);​
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;
}

请仔细阅读s的评论,尤其是其中提供的评论。

jsonobj.first.second=100就可以了。对于一个通用的解决方案,您如何看待重复的属性名称?对象可以有多个属性,所有这些属性都引用其他对象,每个对象都有自己的
second
属性,或者可以在多个级别使用相同的属性名称,例如
obj.first.second.second
obj.first.second
不同-那么您将返回哪个属性?另外,这不是JSON,它是一个对象(或嵌套对象)——@nnnnnn:thanx代表ur链接。我刚刚理解了json和object literal之间的区别!:)请注意,这个问题与JSON完全无关。您似乎混淆了JavaScript对象文本(JavaScript语言语法的结构)和JSON(一种独立于语言的数据交换格式,如XML或CSV)。我将相应地编辑您的问题。另请参见:。如果我不知道json对象的结构,该怎么办?如果不知道结构,您将如何更改属性?。。。如果在对象树中的其他地方有另一个同名属性怎么办如果未定义
first
怎么办?相同,请检查未定义、已更新的codethanx。你的方法对我有用!:)