Junwen's home
  • ES6

    • ES6 Decorator
    • ES6核心特性
    • Promise&Generator
  • js原理

    • 简单实现bind、apply和call
    • 如何遍历一个dom tree
    • 实现函数currying
    • 实现一个event
    • 详解js的继承
    • 详解requestAnimationFrame
    • Canvas api详解
    • DOM事件
    • EventLoop详解
    • JavaScript的内存管理
    • JavaScript的运行机制
    • Math对象
    • new操作符都做了什么
    • create基本实现原理
    • Set、Map、WeakSet和WeakMap
    • web worker原理
    • WebGL教程(MDN)
  • jsInfoSeries

    • 简介
    • JavaScript基础知识
    • 基础知识2
    • 基础知识3
    • 基础知识4
  • 技巧

    • 5个js解构有趣用途
    • 如何使用set提高代码性能
    • cordova构建项目时的问题
    • js中轻松遍历对象属性的几种方式
  • 怎么写出更好的css
  • BFC详解
  • box-shadow详解
  • CSS小技巧
  • Grid布局详解
HTML
  • IP十问
  • http笔试
  • http协议
  • 浏览器原理
  • 浏览器缓存其实就这么一回事儿
  • 浏览器兼容性问题
  • 移动端开发兼容性适配
  • 前端性能优化
  • 前端如何进行seo优化
  • webpack

    • webpack HMR
    • webpack优化基本方法
  • leetcode题解

    • 两数之和
    • 判断整数是否为回文串
    • 无重复字符的最长子串
  • Js链表
  • JavaScript排序
  • React

    • 虚拟DOM原理理解
    • React Hook
    • 组件复用指南
  • Vue

    • Vue举一反三
面试题
读书笔记
GitHub (opens new window)

Syun0216

多读书多种树
  • ES6

    • ES6 Decorator
    • ES6核心特性
    • Promise&Generator
  • js原理

    • 简单实现bind、apply和call
    • 如何遍历一个dom tree
    • 实现函数currying
    • 实现一个event
    • 详解js的继承
    • 详解requestAnimationFrame
    • Canvas api详解
    • DOM事件
    • EventLoop详解
    • JavaScript的内存管理
    • JavaScript的运行机制
    • Math对象
    • new操作符都做了什么
    • create基本实现原理
    • Set、Map、WeakSet和WeakMap
    • web worker原理
    • WebGL教程(MDN)
  • jsInfoSeries

    • 简介
    • JavaScript基础知识
    • 基础知识2
    • 基础知识3
    • 基础知识4
  • 技巧

    • 5个js解构有趣用途
    • 如何使用set提高代码性能
    • cordova构建项目时的问题
    • js中轻松遍历对象属性的几种方式
  • 怎么写出更好的css
  • BFC详解
  • box-shadow详解
  • CSS小技巧
  • Grid布局详解
HTML
  • IP十问
  • http笔试
  • http协议
  • 浏览器原理
  • 浏览器缓存其实就这么一回事儿
  • 浏览器兼容性问题
  • 移动端开发兼容性适配
  • 前端性能优化
  • 前端如何进行seo优化
  • webpack

    • webpack HMR
    • webpack优化基本方法
  • leetcode题解

    • 两数之和
    • 判断整数是否为回文串
    • 无重复字符的最长子串
  • Js链表
  • JavaScript排序
  • React

    • 虚拟DOM原理理解
    • React Hook
    • 组件复用指南
  • Vue

    • Vue举一反三
面试题
读书笔记
GitHub (opens new window)
  • ES6

    • ES6 Decorator
    • ES6核心特性
    • Promise&Generator
  • js原理

    • 简单实现bind、apply和call
    • 如何遍历一个dom tree
    • 实现函数currying
    • 实现一个event
    • 详解js的继承
    • 详解requestAnimationFrame
    • Canvas api详解
    • DOM事件
    • EventLoop详解
    • JavaScript的内存管理
    • JavaScript的运行机制
    • Math对象
    • new操作符都做了什么
    • Object.create基本实现原理
    • Set、Map、WeakSet和WeakMap
    • web worker原理
    • WebGL教程(MDN)
  • jsInfoSeries

    • 简介
    • JavaScript基础知识
    • 基础知识2
    • 基础知识3
    • 基础知识4
  • 技巧

    • 5个js解构有趣用途
      • 如何使用set提高代码性能
      • cordova构建项目时的问题
      • js中轻松遍历对象属性的几种方式
    • JavaScript
    junwen
    2021-03-20

    5个js解构有趣用途

    参考 https://juejin.im/post/5d5f29dde51d456216553519 (opens new window)

    # 交换变量

    不使用解构

    let a = 1, b = 2, temp;
    temp = a; a = b; b = temp;
    
    console.log(a); // 2
    console.log(b); // 1
    
    1
    2
    3
    4
    5

    使用解构

    let a = 1, b=2;
    [a, b] = [b, a];
    
    console.log(a); // 2
    console.log(b); // 1
    
    //解构两个以上变量
    
    let zero=2, one=1, two=0;
    [zero, one, two] = [two, one, zero];
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # 访问数组中的元素

    //访问数组的第一项,若不存在则指定默认值
    const colors = [];
    let firstColor = colors[0] || 'red';
    
    //使用解构
    
    let [firstColor = 'red'] = colors;
    console.log(firstColor); //red
    
    //若是解构第二个
    
    let [, secondColor = 'white'] = colors;
    //左侧逗号表示忽略第一个元素,使用index为1进行赋值
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    # 不可变的操作

    不可变性 要求不能改变原始对象。

    //数组解构
    const numbers = [1,2,3];
    const [, ...foodNumbers] = numbers;
    
    foodNumbers; // [2,3];
    numbers; // [1,2,3];
    
    //对象解构
    const value = {
      foo: 'Foo',
      bar: 'Bar'
    };
    
    const { foo, ...valueBar } = value;
    
    valueBar;// {bar: 'Bar'};
    value; // {foo: 'Foo', bar: 'Bar'}
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    # 解构iterables

    自定义可迭代协议的对象解构。
    许多原生基本类型和对象都是可迭代的: array、string、typed arrays、set和map。

    const movies = {
      list: [
        {title: 'heat'},
        {title: 'interstellar'}
      ],
      [Symbol.interator]() {
        let index = 0;
        return {
          next: () => {
            if(index < this.list.length) {
              const value = this.list[index++].title;
              return { value, done: false };
            }
            return {done: true}
          }
        }
      }
    };
    const [firstMovieTitle] = movies;
    console.log(firstMovieTitle);
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    codepen (opens new window);

    # 解构动态属性

    function greet(obj, nameProp) {
      const { [nameProp]: name = 'unkown' } = obj;
      return `Hello ${name}`;
    }
    
    greet({name: 'Batman'}, 'name'); // Hello, Batman
    greet({}, 'name'); //Hello, unkown
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    在Github上编辑此页 (opens new window)
    #JavaScript
    上次更新: 3/22/2021, 3:14:54 AM
    基础知识4
    如何使用set提高代码性能

    ← 基础知识4 如何使用set提高代码性能→

    最近更新
    01
    如何打造全链路项目生命周期的统一交付平台
    04-10
    02
    如何建立前端标准化研发流程
    04-10
    03
    如何从0到1一步步成体系地搭建CI
    04-10
    更多文章>
    Theme by Vdoing | Copyright © 2019-2021 Syun
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式