• es6之解构赋值


    es6的语法已经出了很长的时间了,在使用上也可以通过babel这类的编译工具转译为浏览器可以识别的es5的语法,但是依旧有很多开发在写代码的时候,依旧没有用es6的语法,而是习惯使用老的语法,这篇文章主要会介绍解构赋值基本用法以及在实际使用场景中相比es5语法的优势,让大家从根本上了解es6语法的优势

    基本用法

    数组解构

    让我们一起先来看数组解构的基本用法:

    
    let [a, b, c] = [1, 2, 3] // a=1, b=2, c=3
    let [d, [e], f] = [1, [2], 3] // 嵌套数组解构 d=1, e=2, f=3
    let [g, ...h] = [1, 2, 3] // 数组拆分 g=1, h=[2, 3]
    let [i,,j] = [1, 2, 3] // 不连续解构 i=1, j=3
    let [k,l] = [1, 2, 3] // 不完全解构 k=1, l=2
    

    上面的例子包含了数组解构时常用的基本用法

    对象解构

    接下来再让我们一起看看对象解构的基本用法:

    
    let {a, b} = {a: 'aaaa', b: 'bbbb'} // a='aaaa' b='bbbb'
    let obj = {d: 'aaaa', e: {f: 'bbbb'}}
    let {d, e:{f}} = obj // 嵌套解构 d='aaaa' f='bbbb'
    let g;
    (g = {g: 'aaaa'}) // 以声明变量解构 g='aaaa'
    let [h, i, j, k] = 'nice' // 字符串解构 h='n' i='i' j='c' k='e'
    

    使用场景

    变量赋值

    我们先来看最基本的使用场景:变量赋值,先来看我们在平时开发中是怎么使用es5对变量赋值的:

    
    var data = {userName: 'aaaa', password: 123456}
    var userName = data.userName
    var password = data.password
    console.log(userName)
    console.log(password)
    var data1 = ['aaaa', 123456]
    var userName1 = data1[0]
    var password1 = data1[1]
    console.log(userName1)
    console.log(password1)
    

    上面两个例子是最简单的例子,用传统es5变量赋值,然后调用,这么写的问题就是显得代码啰嗦,明明一行可以搞定的事情非要用三行代码,来看看解构赋值是怎么干的:

    
    const {userName, password} = {userName: 'aaaa', password: 123456}
    console.log(userName)
    console.log(password)
    const [userName1, password1] = ['aaaa', 123456]
    console.log(userName1)
    console.log(password1)
    

    相对于es5的语法是不是更加简单明了,在数据量越大用解构赋值的优势越明显

    函数参数的定义

    一般我们在定义函数的时候,如果函数有多个参数时,在es5语法中函数调用时参数必须一一对应,否则就会出现赋值错误的情况,来看一个例子:

    
    function personInfo(name, age, address, gender) {
      console.log(name, age, address, gender)
    }
    personInfo('william', 18, 'changsha', 'man')
    

    上面这个例子在对用户信息的时候需要传递四个参数,且需要一一对应,这样就会极易出现参数顺序传错的情况,从而导致bug,接下来来看es6解构赋值是怎么解决这个问题的:

    
    function personInfo({name, age, address, gender}) {
      console.log(name, age, address, gender)
    }
    personInfo({gender: 'man', address: 'changsha', name: 'william', age: 18})
    

    这么写我们只需要知道要传什么参数就行来,不需要知道参数的顺序也没问题

    交换变量的值

    在es5中我们需要交换两个变量的值需要借助临时变量的帮助,来看一个例子:

    
    var a=1, b=2, c
    c = a
    a = b
    b = c
    console.log(a, b)
    

    来看es6怎么实现:

    
    let a=1, b=2;
    [b, a] = [a, b]
    console.log(a, b)
    

    是不是比es5的写法更加方便呢

    函数的默认参数

    在日常开发中,经常会有这种情况:函数的参数需要默认值,如果没有默认值在使用的时候就会报错,来看es5中是怎么做的:

    
    function saveInfo(name, age, address, gender) {
      name = name || 'william'
      age = age || 18
      address = address || 'changsha'
      gender = gender || 'man'
      console.log(name, age, address, gender)
    }
    saveInfo()
    

    在函数离 main先对参数做一个默认值赋值,然后再使用避免使用的过程中报错,再来看es6中的使用的方法:

    
    function saveInfo({name= 'william', age= 18, address= 'changsha', gender= 'man'} = {}) {
      console.log(name, age, address, gender)
    }
    saveInfo()
    

    在函数定义的时候就定义了默认参数,这样就免了后面给参数赋值默认值的过程,是不是看起来简单多了

    总结

    这篇文章简单介绍了es6的解构赋值,如果有错误或不严谨的地方,欢迎批评指正,如果喜欢,欢迎点赞收藏

    原文地址:https://segmentfault.com/a/1190000017312226
  • 相关阅读:
    Translation Rule 和命中法则
    Cisco Extension Mobility配置步骤详解
    tclsh命令, cisco 快速测试工具
    136、多继承的优缺点,作为一个开发者怎么看待多继承
    135、 虚函数的内存结构,那菱形继承的虚函数内存结构呢
    134、隐式转换,如何消除隐式转换?
    133、说一下你理解的 ifdef endif代表着什么?
    132、 静态成员与普通成员的区别是什么?
    131、全局变量和static变量的区别
    130、定义和声明的区别
  • 原文地址:https://www.cnblogs.com/lovellll/p/10093848.html
Copyright © 2020-2023  润新知