2017-02-24 68 views
1

比方说,我有一个对象 -如何确定在给定的对象在Javascript中的对象?

var obj = { 
    name : 'John', 
    contact : { 
      address : 'xyz', 
      phone : 555 
    } 
} 

现在,当我遍历这个对象

for (let key in obj) { 
    console.log(typeof key); 
} 

在这两种情况下,我得到“串”的类型。 那么有什么方法可以将联系价值作为一个对象?

回答

4

key实际上包含 “名” 和 “接触” 的字符串。

如果要检测包含在contact属性值的类型,你需要访问它是这样的:

typeof obj[key] 

演示:

var obj = { 
 
    name : 'John', 
 
    contact : { 
 
    address : 'xyz', 
 
    phone : 555 
 
    } 
 
} 
 

 
for (let key in obj) { 
 
    console.log(key + " (key is " + typeof key + ", value is " + typeof obj[key] + "):"); 
 
    console.log(obj[key]); 
 
}

2

你需要用property accessor

console.log(typeof obj[key]); 
//     ^^^^^^^^ 

解决财产的价值,否则,你永远'string',因为对象的键是字符串。

var obj = { name : 'John', contact : { address : 'xyz', phone : 555 } }; 
 

 
for (let key in obj) { 
 
    console.log(typeof obj[key]); 
 
}

2

你是试图找到类型的关键,而你应该找到类似的价值,如 的typeof OBJ [关键]

1

你可以这样做没有任何循环,如果您知道属性的关键,你想:

var obj = { 
 
    name: 'John', 
 
    contact: { 
 
    address: 'xyz', 
 
    phone: 555 
 
    } 
 
}; 
 

 
console.log(obj.contact); 
 
console.log(obj["contact"]); 
 
console.log(typeof obj.contact); 
 
console.log(typeof obj["contact"]);

当使用一个循环,"contact"匝变成一个变量。这意味着你像这样访问属性:

for (var key in obj) { 
    console.log(obj[key]); // key === "contact" 
} 

的这个代替:

obj["contact"] 

还应注意obj.keyobj[key]之间的区别:

var obj = { 
 
    key: "this_is_a_key", 
 
    foo: "this_is_a_foo" 
 
}; 
 

 
var key = "foo"; 
 
console.log(obj.key); // returns the "key" property 
 
console.log(obj[key]); // returns the "foo" property because the key variable holds "foo"