**p3 JS部分中的7.3遍历对象属性里面的另类解答**<br />要求:输入对象person中的所有键值对
1.首先题目要求是使用for..in方法,答案如下
let person = {
name: 'henry',
age: 18,
family: {
papa: 'jack',
mama: 'mary',
sister: 'jane'
}
};
function byForIn(obj) {
for(let key in obj) {
if (key === "family") {
for(let familyKey in obj[key]) {
// for(let familyKey in obj.key) {
// 注意这里取得属性值的方法是 对象[属性名]
// 不能直接obj.key原因是这里的key是“name”类型,有“”;
console.log(familyKey+":"+obj[key][familyKey]);
}
}
else {
console.log(key+":"+obj[key]);
}
}
}
console.log("使用for...in");
byForIn(person);
2.然后另外用object.keys() 方法做出的答案是:
let person = {
name: 'henry',
age: 18,
family: {
papa: 'jack',
mama: 'mary',
sister: 'jane'
}
};
function byObject(obj) {
let keys = Object.keys(obj);
for(let i = 0; i < keys.length; i++) {
if(keys[i] === "family") {
let familyKeys = Object.keys(obj[keys[i]]);
for(let j = 0; j < familyKeys.length; j++) {
// 下面这条语句略微有些难理解
// 拆分一下就是:
// let family = obj[keys[i]] 或 obj["family"] 这里得到的family就是:obj对象中的family对象
// 然后familyKey[j]相当于遍历了一下 family中的“papa”“mama”“sister”属性值
console.log(familyKeys[j] + ":" + obj[keys[i]][familyKeys[j]]);
}
}else {
console.log(keys[i]+":"+obj[keys[i]]);
}
}
}
console.log("使用for...in");
byObject(person);
总结:两个方法对比一下,还是建议用for .. in方法,用object.keys()方法对思维逻辑要求较for .. in方法较高。
然后需要注意以下几点:
1.取出对象属性的方法只有哪两种?
对象[“键名”](注意写法:对象+中括号+中括号里面的带引号键名)
对象.键名(注意:这里有 点 ,而且键名不加引号)
举例如下:person . name 和 person [ “ name ” ]
2.使用objects.keys() 的返回值是带引号的键名,想通过他来获取键值的话,只能用对象【“ ”】方法
( ps:注意keys有“ s ”,keys是object中的一个方法,所以需要加“ . ”,而且后面需要加括号() )
傻瓜记法:对象获取有两种方法,一种带点,一种不带电但是带中括号。
keys是object的一个方法,可以获取带双引号的键名,一般和带中括号的属性获取方法一起用。