ES6中for循环和Map、Set怎么用
ES6(ECMAScript 6)是ECMA国际组织制定的JavaScript最新的标准,为JavaScript语言带来了很多新的特性和语法糖。其中,for循环和Map、Set是JavaScript中非常常用的工具,它们在ES6中都有了新的用法。本文将详细介绍ES6中的for循环和Map、Set的用法,以及一些应用场景。
## ES6中的for循环
ES6中的for循环有两种形式:for...of和for...in。其中,for...of循环可以遍历可迭代对象(包括数组、字符串、Set、Map等),而for...in循环则是用于遍历对象的属性。
### for...of
for...of循环用于遍历可迭代对象,例如:
let arr = [1, 2, 3];
for (let item of arr) {
console.log(item); //输出:1 2 3
}
let str = 'hello';
for (let char of str) {
console.log(char); //输出:h e l l o
}
for...of循环也可以遍历Set和Map:
let set = new Set([1, 2, 3]);
for (let item of set) {
console.log(item); //输出:1 2 3
}
let map = new Map([
['name', 'Alice'],
['age', 18]
]);
for (let [key, value] of map) {
console.log(key, value); //输出:name Alice age 18
}
需要注意的是,使用for...of循环遍历对象时,只能获取到对象的属性值,而不能获取属性名。因此,如果需要获取属性名和属性值,可以使用for...in循环。
### for...in
for...in循环用于遍历对象的属性,例如:
let obj = { name: 'Alice', age: 18 };
for (let key in obj) {
console.log(key, obj[key]); //输出:name Alice age 18
}
需要注意的是,for...in循环遍历对象的属性时,会遍历到对象原型链上的所有属性。因此,如果只需要遍历对象自身的属性,可以结合hasOwnProperty方法使用:
let obj = { name: 'Alice', age: 18 };
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key, obj[key]); //输出:name Alice age 18
}
}
## ES6中的Map
Map是JavaScript中的一种数据结构,用于存储键值对,类似于对象。但是,Map比对象更加灵活,它的键可以是任意类型的值,而不仅限于字符串。
### 创建Map
在ES6中,可以使用new关键字和Map构造函数创建一个Map实例:
let map = new Map();
也可以在创建Map实例时,通过数组传入键值对:
let map = new Map([
['name', 'Alice'],
['age', 18]
]);
console.log(map.get('name')); //输出:Alice
console.log(map.get('age')); //输出:18
### Map的常用方法
Map有一些常用的方法,包括set、get、has、delete、clear等。
- set(key, value):设置键值对,如果key已经存在,则覆盖原有的value。
- get(key):获取key对应的value,如果key不存在,则返回undefined。
- has(key):判断Map中是否包含key。
- delete(key):删除Map中key对应的键值对。
- clear():清空Map中所有的键值对。
例如:
let map = new Map();
map.set('name', 'Alice');
map.set('age', 18);
console.log(map.get('name')); //输出:Alice
console.log(map.has('name')); //输出:true
console.log(map.size); //输出:2
map.delete('name');
console.log(map.has('name')); //输出:false
map.clear();
console.log(map.size); //输出:0
### Map的遍历
ES6中,Map有四种遍历方法:keys、values、entries、forEach。
- keys():返回Map中所有的键名。
- values():返回Map中所有的键值。
- entries():返回Map中所有的键值对。
- forEach(callback, thisArg):遍历Map中的所有键值对,对每个键值对都执行一次callback函数,可以指定回调函数的this对象。
例如:
let map = new Map([
['name', 'Alice'],
['age', 18]
]);
for (let key of map.keys()) {
console.log(key); //输出:name age
}
for (let value of map.values()) {
console.log(value); //输出:Alice 18
}
for (let [key, value] of map.entries()) {
console.log(key, value); //输出:name Alice age 18
}
map.forEach(function(value, key, map) {
console.log(key, value); //输出:name Alice age 18
});
## ES6中的Set
Set是JavaScript中的一种数据结构,用于存储一组 的值。Set中的值可以是任何数据类型,包括对象和函数。
### 创建Set
在ES6中,可以使用new关键字和Set构造函数创建一个Set实例:
let set = new Set();
也可以在创建Set实例时,通过数组传入值:
let set = new Set([1, 2, 3]); console.log(set.has(1)); //输出:true console.log(set.has(4)); //输出:false
### Set的常用方法
Set有一些常用的方法,包括add、has、delete、clear等。
- add(value):向Set中添加value。如果value已经存在,则不会重新添加。
- has(value):判断Set中是否包含value。
- delete(value):从Set中删除value。
- clear():清空Set中所有的值。
例如:
let set = new Set([1, 2, 3]); set.add(4); console.log(set.has(4)); //输出:true console.log(set.size); //输出:4 set.delete(3); console.log(set.has(3)); //输出:false set.clear(); console.log(set.size); //输出:0
### Set的遍历
ES6中,Set有三种遍历方法:keys、values、entries。
- keys():返回Set中所有的值。
- values():返回Set中所有的值。
- entries():返回Set中所有的值和对应的键值。
例如:
let set = new Set([1, 2, 3]);
for (let value of set.values()) {
console.log(value); //输出:1 2 3
}
for (let [key, value] of set.entries()) {
console.log(key, value); //输出:1 1 2 2 3 3
}
## 应用场景
for循环、Map和Set是JavaScript中非常常用的工具,在实际开发中应用广泛。下面,我们将介绍一些应用场景。
### for循环的应用
for循环可以用于遍历数组、字符串等可迭代的对象,对于需要对每个元素进行处理的情况非常实用。
例如,以下是使用for循环对数组进行遍历,并计算出数组中所有元素的和:
let arr = [1, 2, 3];
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
}
console.log(sum); //输出:6
### Map的应用
Map可以用于存储各种类型的数据,而不仅仅是字符串键值。在以下情况下,Map非常适用:
- 需要存储对象或函数等引用类型的键值对。
- 需要保留键值的插入顺序。
例如,以下是使用Map存储对象的示例:
`javascript
let
