人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

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()返回一个数组的数组,其中每个内部数组表示对象的一个属性的键/值对。这里使用解构赋值把这些内部数组拆开,并将它们的元素赋值给两个变量。

posted @ 2022-03-05 15:34  0a  阅读(106)  评论(0)    收藏  举报