for/of与对象(迭代对象的属性)
对象(默认)是不可迭代的。运行时尝试对常规对象使用for/of会抛出TypeError:
let o = { x: 1, y: 2,z: 3};
for(let element of o) {
console.log(element);
}
如果想迭代对象的属性,可以使用for/in循环,或者基于Object.keys()方法的结果使用for/of:
let o = { x: 1, y: 2, z: 3 };
let keys = "";
for(let k of Object.keys(o)) {
keys += k;
}
keys // => "xyz"
这是因为Object.keys()返回一个对象属性名的数组,而数组是可以通过for/of来迭代的。也要注意,这种对象的键的迭代并不像上面例子那样是实时的,在循环体内修改对象o不会影响迭代。如果你不在乎对象的键,也可以像下面这样迭代每个键对应的值:
let sum = 0;
for(let v of Object.values(o)) {
sum += v;
}
sum // => 6
如果你既想要对象属性的键,也想要属性的值,可以基于Object.entries()和解构赋值来使用for/of:
let pairs = "";
for(let [k, v] of Object.entries(o)) {
pairs += k + v;
}
pairs // => "x1y2z3"
Object.entries()返回一个数组的数组,其中每个内部数组表示对象的一个属性的键/值对。这里使用解构赋值把这些内部数组拆开,并将它们的元素赋值给两个变量。


浙公网安备 33010602011771号