美文网首页
2021-07-26

2021-07-26

作者: wangwing | 来源:发表于2021-07-26 15:05 被阅读0次

    一、变量的解构赋值
    1)数组和对象解构的区别

    1. 数组的元素是按次序排列的,变量取值由 位置 决定
    let [x, y] = [1, 2, 3];
    x // 1
    y // 2
    

    如果x,y位置互换了,则值也变了
    ···
    let [y, x] = [1, 2, 3];
    x // 2
    y // 1
    ···

    1. 对象的属性是没次序的, 变量必须与属性同名才能取到正确的值
    let { foo,baz } = { foo: 'aaa', bar: 'bbb' };
    foo //'aaa'
    baz // undefined
    
    1. 如果解构失败,变量的值就等于undefined

    2) 赋值的话必须嵌套(),否则会报错, 加上()浏览器会把()里的内容当做表达式去解析

    let obj = {};
    let arr = [];
    //解构赋值允许等号左边的模式之中,不放置任何变量名
     ({foo:obj.prop, bar: arr[0]}  = {foo:123, bar:true})  
    
     obj  //{prop:123}
     arr  // [true]
    

    3)如果要将一个已经声明的变量用于解构赋值,必须非常小心。

    // 错误的写法
    let x;
    {x} = {x: 1};
    // SyntaxError: syntax error
    

    代码的写法会报错,因为 JavaScript 引擎会将{x}理解成一个代码块,从而发生语法错误。所以需要跟2)一样加上()才能避免 JavaScript 将其解释为代码块
    4) 对数组进行对象属性的解构,因为数组其实就是个特殊的对象

    let arr = [1, 2, 3];
    let {0 : first, [arr.length - 1] : last} = arr;
    first // 1
    last // 3
    

    相关文章

      网友评论

          本文标题:2021-07-26

          本文链接:https://www.haomeiwen.com/subject/eucgmltx.html