数组遍历
forEach
let arr = ['foo', 'bar', 'baz'];arr.forEach((item, index) => { console.log(index + ',' + item);});// 0,foo// 1,bar// 2,baz
forEach
循环无奈通过break
和return
跳出循环。
for...in
let arr = ['foo', 'bar', 'baz'];for (let i in arr) { console.log(i + ',' + arr[i]);}// 0,foo// 1,bar// 2,baz
for...in
循环只能用来遍历键名,然而能够遍历出非数值类型的键名,而且可能会以任意程序遍历键名,不实用数组,实用于对象。
for...of
let arr = ['foo', 'bar', baz'];for (let i of arr) { console.log(i);}// foo// bar// baz
for...of
循环间接遍历数组的元素,并且能够通过break
和return
手动跳出循环;只有部署了Iterator
的数据结构能力应用。
对象遍历
Object.keys()、Object.values()、Object.entries()
const obj = { name: "小米", id: 1, price: 3999, [Symbol.for('num')]: 50};Object.defineProperty(obj, 'discount', { value: 8, writable: false, enumerable: false, configurable: false});Object.keys(obj); // [name, id, price]Object.values(obj); // ['小米', 1, 3999]Object.entries(obj); // [["name", "小米"], ["id", 1], ["price", 3999]]
Object.keys()
会返回对象的所有键名,Object.values()
返回对象的所有属性值,Object.entries()
返回对象的属性和属性值键值对数组,这三个办法都不能返回不可枚举和Symbol
属性。
for...in
const obj = { name: "小米", id: 1, price: 3999, [Symbol.for('num')]: 50};Object.defineProperty(obj, 'discount', { value: 8, writable: false, enumerable: false, configurable: false});for (let i in obj) { console.log(obj[i]); // '小米' 1 3999}
for...in
遍历对象不会返回Symbol
和不可枚举属性。
Object.getOwnPropertyNames
const obj = { name: "小米", id: 1, price: 3999, [Symbol.for('num')]: 50};Object.defineProperty(obj, 'discount', { value: 8, writable: false, enumerable: false, configurable: false});Object.getOwnPropertyNames(obj); // [name, id, price, num]
Object.getOwnPropertyNames
办法返回对象内除Symbol
以外的所有属性名。
Object.getOwnPropertySymbols
const obj = { name: "小米", id: 1, price: 3999, [Symbol.for('num')]: 50};Object.defineProperty(obj, 'discount', { value: 8, writable: false, enumerable: false, configurable: false});Object.getOwnPropertySymbols(obj); // []
Object.getOwnPropertySymbols
办法返回对象外部的所有Symbol
属性。
Reflect.ownKeys
const obj = { name: "小米", id: 1, price: 3999, [Symbol.for('num')]: 50};Object.defineProperty(obj, 'discount', { value: 8, writable: false, enumerable: false, configurable: false});Reflect.ownKeys(obj); // ['name', 'id', 'price', 'discount', Symbol(num)]
Reflect.ownKeys
办法返回对象外部所有属性名,包含不可枚举属性和Symbol
属性。