let arr = ['foo', 'bar', 'baz'];
arr.forEach((item, index) => {console.log(index + ',' + item);
});
// 0,foo
// 1,bar
// 2,baz
-
forEach
循环无奈通过 break
和return
跳出循环。
let arr = ['foo', 'bar', 'baz'];
for (let i in arr) {console.log(i + ',' + arr[i]);
}
// 0,foo
// 1,bar
// 2,baz
-
for...in
循环只能用来遍历键名,然而能够遍历出非数值类型的键名,而且可能会以任意程序遍历键名,不实用数组,实用于对象。
let arr = ['foo', 'bar', baz'];
for (let i of arr) {console.log(i);
}
// foo
// bar
// baz
-
for...of
循环间接遍历数组的元素,并且能够通过 break
和return
手动跳出循环;只有部署了 Iterator
的数据结构能力应用。
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
属性。
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
和不可枚举属性。
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
以外的所有属性名。
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
属性。
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
属性。