枚举和迭代——借由for-in和for-of说明 发表于 2023-10-11 更新于 2024-03-11 分类于 技术 阅读次数: Changyan: 本文字数: 944 阅读时长 ≈ 2 分钟 枚举和迭代有什么区别? for-in 是遍历所有可枚举属性(包括原型链上的) 123456789let obj = { a: 'aaa', b: 'bbb'} Object.prototype.c = 'ccc'console.log(obj);for(let i in obj){ console.log(i);} 1234Object.defineProperty(obj,'d',{ value: 'ddd', enumerable: false}) //d属性枚举不到 🔗更多关于枚举 所以enumberable决定了属性能不能被枚举到而可迭代性是由各种类型里内置的迭代器工厂函数决定的 详见:🔗迭代器-生成器 for-of 是迭代,要有迭代器才能用 12345//比如迭代一个Object类型会报错,因为Object没有实现Iterable接口不可迭代console.log(obj); //{a: 'aaa', b: 'bbb', d: 'ddd'}for (let x of obj){ console.log(x);} //Uncaught TypeError: obj is not iterable 手写一个伪数组迭代器123456789101112131415161718192021const { range } = require("lodash");let fakeArr = { 0: 'a', 1: 'b', 2: 'c', length: 3,}//赋值号右边是一个生成器函数Object.prototype[Symbol.iterator] = function* () { for (i in range(0, this.length)) { yield this[i] }}for (let item of fakeArr) { console.log(item); }