Set Map 解构赋值

Set

  • 类似于数组,但是成员的值都是唯一的,没有重复的值
    for-of可以用于遍历Map和Set,for-in不行
    ps: set内部两个NaN是相等的
  • 方法: const s = new Set()
  1. s.add()
    add方法返回的是当前的Map对象,因此可以采用链式写法

  2. s.delete()

  3. s.has()

  4. s.clear()

  5. s.keys()

  • Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致
  1. s.values()
  2. s.entries()
  • entries方法返回的遍历器,同时包括键名和键值,所以每次输出一个数组,它的两个成员完全相等。
    ps:Set 结构的实例默认可遍历,它的默认遍历器生成函数就是它的values方法,所以可以省略values方法,直接用for…of循环遍历 Set

summary:
操作方法: add、delete、has、clear
遍历set: for(value of s){}

  • Set可以使用filter、map和has方法
let a = new Set([1,4,6,7])
let b = new Set([4,5,8,1])
// 并集
let union = new Set([...a,...b])
// 交集
let intersect = new Set([...a].filter(x => b.has(x)))
// (a相对b)差集
let difference = new Set([...a].filter(x => !b.has(x)))

Map

  • 类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键
const map = new Map([
  ['name', '张三'],
  ['title', 'Author']
]);

map.size // 2
map.get('name') // "张三"
map.get('title') // "Author"
  • undefined和null是两个不同的键。虽然NaN不严格相等于自身,但 Map 将其视为同一个键
  • 操作方法 const m = new Map()
  1. m.size()
  2. m.set()
  3. m.get()
    set方法返回的是当前的Map对象,因此可以采用链式写法
  4. m.has()
  5. m.delete()
  6. m.clear()
  7. m.keys()
  8. m.values()
  9. m.forEach()
  • Map 本身没有map和filter方法

Object.entries()

  • 返回一个给定对象自身可枚举属性的键值对数组
const obj = {
    
    name:'zhang',age:12,sex:'man'}
Object.entries(obj)  
// [['name','zhang'],['age',12],['sex','mane']]

解构赋值

  • 由于数组本质是特殊的对象,因此可以对数组进行对象属性的解构
let arr = [1,2,4];
let {
    
    0:first,[arr.length-1]:last} = arr
// first : 1
// last : 4
  • 对于已声明的变量
// 错误的写法
let x;
{
    
    x} = {
    
    x: 1};  // 因为 JavaScript 引擎会将{x}理解成一个代码块,从而发生语法错误。只有不将大括号写在行首,避免 JavaScript 将其解释为代码块,才能解决这个问题

// 正确的写法
let x;
({
    
    x} = {
    
    x: 1});
  • 字符串的结构赋值
const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"


let {
    
    length : len} = 'hello';
len // 5
  • 交换变量的值
let x = 1;
let y = 2;

[x, y] = [y, x];

猜你喜欢

转载自blog.csdn.net/qq_36303110/article/details/110671724