• ES6(二)


    对象的扩展

    ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。

    const foo = 'bar';
    const baz = {foo};
    baz // {foo: "bar"}
    
    // 等同于
    const baz = {foo: foo};
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    对象的展开运算符

    展开对象

    const apple = {
        color: '红色',
        shape: '球形',
        taste: '甜'
    };
    console.log({...apple});			// { color: '红色', shape: '球形', taste: '甜' }
    console.log({...apple} === apple);	// false
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    const apple = {
        color: '红色',
        shape: '球形',
        taste: '甜'
    };
    
    const pen = {
        color: '黑色',
        shape: '圆柱形',
        use: '写字'
    };
    
    // 新对象拥有全部属性,相同属性,后者覆盖前者
    console.log({...apple, ...pen});	// { color: '黑色', shape: '圆柱形', taste: '甜', use: '写字' }
    console.log({...pen, ...apple});	// { color: '红色', shape: '球形', use: '写字', taste: '甜' }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    非对象的展开

    console.log({...1});			// {}
    console.log(new Object(1));		// [Number: 1]
    console.log({...undefined});	// {}
    console.log({...null});			// {}
    console.log({...true});			// {}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Object.is()

    Object.is('foo', 'foo')
    // true
    Object.is({}, {})
    // false
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Object.assign()

    const target = { a: 1 };
    
    const source1 = { b: 2 };
    const source2 = { c: 3 };
    
    Object.assign(target, source1, source2);
    target // {a:1, b:2, c:3}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    字符串的扩展

    字符串拼接的巨大区别

    const person = {
        name: 'zjr',
        age: 18,
        sex: '男'
    };
    
    const info =
        '我的名字是:' + person.name +
        ',性别是:' + person.sex +
        ',今年:' + person.age + '岁';
    
    console.log(info);
    
    // 我的名字是:zjr,性别是:男,今年:18岁
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    const person = {
        name: `zjr`,
        age: 18,
        sex: ``
    };
    
    const info = `我的名字是:${person.name},性别是:${person.sex},今年:${person.age}`;
    
    console.log(info);
    
    // 我的名字是:zjr,性别是:male,今年:18岁
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    includes(), startsWith(), endsWith()

    includes():返回布尔值,表示是否找到了参数字符串。
    startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
    endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。

    let s = 'Hello world!';
    
    s.startsWith('Hello') // true
    s.endsWith('!') // true
    s.includes('o') // true
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    let s = 'Hello world!';
    
    s.startsWith('world', 6) // true
    s.endsWith('Hello', 5) // true
    s.includes('Hello', 6) // false
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    repeat()

    'x'.repeat(3) // "xxx"
    'hello'.repeat(2) // "hellohello"
    'na'.repeat(0) // ""
    
    
    • 1
    • 2
    • 3
    • 4

    padStart(),padEnd()

    ES2017 引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。

    'x'.padStart(5, 'ab') // 'ababx'
    'x'.padStart(4, 'ab') // 'abax'
    
    'x'.padEnd(5, 'ab') // 'xabab'
    'x'.padEnd(4, 'ab') // 'xaba'
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    trimStart(),trimEnd()

    trimStart()和trimEnd()这两个方法,它们的行为与trim()一致,trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格。它们返回的都是新字符串,不会修改原始字符串。

    const s = '  abc  ';
    
    s.trim() // "abc"
    s.trimStart() // "abc  "
    s.trimEnd() // "  abc"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运算符扩展

    指数运算符

    2 ** 2 // 4
    2 ** 3 // 8
    
    
    • 1
    • 2
    • 3

    Set

    Set 是一系列无序、没有重复值的数据集合。

    const s = new Set();
    s.add(1);
    s.add(2);
    
    // Set 中不能有重复的成员
    s.add(1);
    console.log(s);		// Set(2) { 1, 2 }
    
    // Set 没有下标去标识每一个值,所以 Set 是无序的,也不能像数组那样通过下标去访问 Set 的成员。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    方法

    add 方法

    const s = new Set();
    s.add(0);
    // 可以连写
    s.add(1).add(2).add(2).add(3);
    console.log(s);		// Set(4) { 0, 1, 2, 3 }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    has 方法

    const s = new Set();
    s.add(0);
    s.add(1).add(2).add(2).add(3);
    console.log(s.has(1));	// true
    console.log(s.has(4));	// false
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    delete 方法

    const s = new Set();
    s.add(0);
    s.add(1).add(2).add(2).add(3);
    s.delete(2);
    // 使用 delete 删除不存在的成员,什么都不会发生,也不会报错
    s.delete(4);
    console.log(s);	// Set(3) { 0, 1, 3 }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    clear 方法

    const s = new Set();
    s.add(0);
    s.add(1).add(2).add(2).add(3);
    s.clear();
    console.log(s);	// Set(0) {}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    forEach 方法

    const s = new Set();
    s.add(0);
    s.add(1).add(2).add(2).add(3);
    
    s.forEach(function (value, key, set) {
        // Set 中 value = key,原因:好多数据结构都有 forEach 方法,为了方便统一,所以参数是统一的,但是参数的意义各有不同
        // set 就是 s 本身
        console.log(value, key, set === s);
        console.log(this);
    });
    
    /*
    0 0 true
    Window
    1 1 true
    Window
    2 2 true
    Window
    3 3 true
    Window 
    */
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    size 属性

    const s = new Set();
    s.add(0);
    s.add(1).add(2).add(2).add(3);
    
    console.log(s.size);	// 4
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    应用

    数组去重

    const s = new Set([1, 2, 1]);
    console.log(s);			// Set(2) { 1, 2 }
    console.log([...s]);	// [ 1, 2 ]
    
    
    • 1
    • 2
    • 3
    • 4

    字符串去重

    const s = new Set('abbacbd');
    console.log(s);					// Set(4) { 'a', 'b', 'c', 'd' }
    console.log([...s].join(''));	// abcd
    
    
    • 1
    • 2
    • 3
    • 4

    因此使用 Set 可以很容易地实现并集(Union)、交集(Intersect)和差集(Difference)。

    let a = new Set([1, 2, 3]);
    let b = new Set([4, 3, 2]);
    
    // 并集
    let union = new Set([...a, ...b]);
    // Set {1, 2, 3, 4}
    
    // 交集
    let intersect = new Set([...a].filter(x => b.has(x)));
    // set {2, 3}
    
    // (a 相对于 b 的)差集
    let difference = new Set([...a].filter(x => !b.has(x)));
    // Set {1}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    Map

    Map 可以理解为:“映射”。

    Map 和 对象 都是键值对的集合。

    // 键 ——> 值,key ——> value
    // 对象:
    const person = {
        name: 'alex',
        age: 18
    };
    
    // Map:
    const m = new Map();
    m.set('name', 'alex');
    m.set('age', 18);
    console.log(m);		// Map(2) { 'name' => 'alex', 'age' => 18 }
    
    // Map 和 对象 的区别:
    // 对象一般用字符串当作 “键”(当然在书写时字符串键的引号可以去掉).
    // Map 中的 “键” 可以是一切类型。
    const m = new Map();
    m.set(true, 'true');
    m.set({}, 'object');
    m.set(new Set([1, 2]), 'set');
    m.set(undefined, 'undefined');
    console.log(m);
    /*
    Map(4) {
      true => 'true',
      {} => 'object',
      Set(2) { 1, 2 } => 'set',
      undefined => 'undefined'
    }
    */
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    方法

    set 方法
    set方法设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。

    const m = new Map();
    
    m.set('edition', 6)        // 键是字符串
    m.set(262, 'standard')     // 键是数值
    m.set(undefined, 'nah')    // 键是 undefined
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    get 方法
    get方法读取key对应的键值,如果找不到key,返回undefined。

    const m = new Map();
    
    const hello = function() {console.log('hello');};
    m.set(hello, 'Hello ES6!') // 键是函数
    
    m.get(hello)  // Hello ES6!
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    has 方法
    has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。

    const m = new Map();
    
    m.set('edition', 6);
    m.set(262, 'standard');
    m.set(undefined, 'nah');
    
    m.has('edition')     // true
    m.has('years')       // false
    m.has(262)           // true
    m.has(undefined)     // true
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    delete 方法
    delete方法删除某个键,返回true。如果删除失败,返回false。

    const m = new Map();
    m.set(undefined, 'nah');
    m.has(undefined)     // true
    
    m.delete(undefined)
    m.has(undefined)       // false
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    clear 方法
    clear方法清除所有成员,没有返回值。

    let map = new Map();
    map.set('foo', true);
    map.set('bar', false);
    
    map.size // 2
    map.clear()
    map.size // 0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    forEach 方法

    m.forEach(function (value, key, map) {
        console.log(this);
    }, document);
    
    
    • 1
    • 2
    • 3
    • 4

    size 属性
    size属性返回 Map 结构的成员总数。

    const map = new Map();
    map.set('foo', true);
    map.set('bar', false);
    
    map.size // 2
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    redis---非关系型数据库
    2.5 贝叶斯分类器
    SpringBoot整合Swagger3.0
    阿赵UE学习笔记——18、声音播放
    less插件使用
    【JavaSE】类和对象 (二) —— 封装、包以及 static 关键字
    Linux系统基本使用 与 程序部署 - JavaEE初阶 - 细节狂魔
    【CGAL_网格处理】Isotropic Remeshing均匀化网格
    C++位图,布隆过滤器
    Linux下PCIE设备分析软件
  • 原文地址:https://blog.csdn.net/2202_75345049/article/details/132495276