使用下标索引方式问题
来源:2-11 编程练习
TKXZ
2023-02-18 11:56:20
相关代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
const obj = {
"0": "xm",
"sex": "male",
length: 2
}
// 在此补充代码
obj[Symbol.iterator] = () => {
let index = 0;
return {
next() {
let value, done;
if(index <= length){
value = obj[index];
done = false;
}
else{
done = true;
}
index++;
return {
value,
done
};
}
};
}
for (const item of obj){
console.log(item);
}
</script>
</body>
</html>问题描述:
只能打印出第一个值, 剩余两个值无法显示
1回答
同学你好,从代码逻辑上来看同学是想一个if解决问题,但是这个思路是有偏差的。在判断语句中同学使用如下:

index小于等于length那么老师这里猜想的是同学是想用obj中自带的length当做判断条件,那么这里首先就是有问题的点(不是不可以,而是方式不对后面有例子)可以打印一下length的值会发现它总是0如下:

如果是想用obj中的length那么则需要写入obj.length如下:


那么为什么虽然说length已经调整过来了,为什么还会没有打印后续的问题。如下:


这里出现2个undefined,这是因为如下:

结合数据来看obj[0]是xm,但是obj[1]在obj中是没有对应的key的,所以是undefined,obj[2]也同样是undefined。
所以这个思路是有偏差的。后面老师会用同学的思路给出两个优化版本。
以下思路仅供参考:
方法一(入门)


方法二(使用obj.length)
首先我们要明确一点,既然length是数字,但是obj中的key是非数字,那么使用数字去访问就是访问不到的。
所以这里我们需要知道怎么得到对象中的key。如下:


使用Object.keys(对象)这样就可以得到对象中的所有key值。
既然得到了key值,那么我们按照obj.length进行一步一步走的时候,是不是直接访问
obj[Object.keys(obj)[index]]就可以了,其中Object.keys(obj)[index]就是['0','sex','length']它们中的某一个。
如Object.keys(obj)[index]当index是0时则对应的就是['0','sex','length']中的0。
如Object.keys(obj)[index]当index是1时则对应的就是['0','sex','length']中的"sex"。
如Object.keys(obj)[index]当index是2时则对应的就是['0','sex','length']中的"length"。
那么在用obj[0]、obj["sex"]、obj["length"]去访问,则就可以得到其中对应的值了。如下:


同学自己试试,祝学习愉快!
相似问题