js的遍历问题

for infor of区别

js的遍历真的让人迷迷糊糊的,单纯的for、while循环不够,map、forEach还能理解,居然还多几个for…in,for…of。着实让人摸不到头脑

相信大家在学习遍历时,一定碰见了两个名词,enumerableiterator

要区别它们首先得理解这两者的差异。

enumerableiterator

enumerable

对象的属性对象,让我们打印出来看看

1
2
3
4
5
6
7
8
9
10
11
var obj = { p: "a" };
let prop = Object.getOwnPropertyDescriptor(obj, "p"); //查看属性p的属性对象
console.log(prop);
// {
// value: a,
// writable: true,
// enumerable: true,
// configurable: true,
// get: undefined,
// set: undefined
// }

回顾:之前关于属性的三种状态Extensible(不可加)、seal()(不可加减)、freeze()(不可加减改)

iterator

区别

其实更多的要区分的是for inObject.keys

for in可以遍历所有可枚举项,包括原型中的内容

浅显的理解,我们可以把

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

const array1 = ["a", "b", "c"];
//for in
for (const val in array1) {
console.log(val);
}//打印索引
//0
//1
//2

//for of
for (const val of array1) {
console.log(val);
}//打印值
//a
//b
//c

由上文可知对象不可迭代但可以被枚举

1
2
3
4
5
6
7
8
9
10

for (let i in obj) {
console.log(i);
console.log(obj[i]);
}
for (let i of obj) {
console.log(i);
console.log(obj[i]);
} //err:obj is not iterable
//效果可以自己打印一下

对象的维度

属性

继承

方法

  • 首先遍历所有数值键,按照数值升序排列。
  • 其次遍历所有字符串键,按照加入时间升序排列。
  • 最后遍历所有 Symbol 键,按照加入时间升序排列。
  • //pass

以后完善