变量的解构和赋值

自动解构

只有数组和对象能够自动解构

ES6中允许从数组中提取,安装对应的位置,对变量进行赋值,对象也是相同的道理

我们先看一下基本的解构和赋值

数组的解构

对象的解构

var [a,b,c] = [1,2,3];

console.log(a); // 1

console.log(b); // 2

console.log(c); // 3

var {a,b,c} = {"a":1, "b": 2, "c":3};

console.log(a); //1

console.log(b); // 2

console.log(c); // 3

简单看一下应用场景,比如对象的解构

    <script>
// 函数的形参就是对象的解构
function People({name,age,sex}){
  console.log(name,age,sex)
}
// 赋值
var xiaoming = new People({
  name: "小明",
  age: 18,
  sex: "",
})
    </script>

 

 

 数组的结构和赋值的应用场景,实现一个换值的场景

    <script>
var a = 100;
var b = 200;
var c = a;
a = b;
b = c;
console.log(a)
console.log(b)
    </script>

 

 

 

数组的解构

<script>
        var [a,b] = [100,200];
        [b,a] = [a,b];
        console.log([a,b])
    </script>

 

 

 

 

解构是一一对应的,无论内部结构多复杂

 结构的过程是一个一一对应的过程,这个过程很复杂也很抽象,注意的一点是数组对数组,对象对对象,下面的写法是错误的

var {a,b,c} = [1,2,3];
console.log(a,b,c)

 

 

 上面的结果是undefined,因为不能解构出内容

案例一

let [t1, [[t2], t3]] = [1, [[2], 3]];
      console.log(t1,t2,t3)

 

 

 

 案例二

    let [ , , t3] = [1, 2, 3];
      console.log(t3)

 

 

 剩余参数

如果变量定义的内容少,赋值部分的内容多

var [a,b,c] = [1,2,3,4,5,6,7,8,9]
console.log(a)
console.log(b)
console.log(c)

 

 

 此时只会输出对应赋值的部分

如果想输出剩余所有的内容,此时需要用到“...”预算符

var [a,b,...c] = [1,2,3,4,5,6,7,8,9]
console.log(a)
console.log(b)
console.log(c)

 

 

 注意:“...”运算符只能放在最后一个参数上,不放在最后一个参数上就回报错

var [a,…b,c] = [1,2,3,4,5,6,7,8,9]

 

 

 强制结构

var arr = [1,2,3];
console.log(...arr)

 

 

 

对象数据也可以实现强制结构,但是不能单独结构,必须要依赖一个结构器

var obj1 = {
  a: 1,
  b: 2,
  c: 3,
  d: 4
}
var obj2 = {
  ...obj1,
  e: 5
}
console.log(obj2)

 

 

对象解构常用于修改某一个值

比如下面的代码

var obj1 = {
  a: 1,
  b: 2,
  c: 3,
  d: 4
}
var obj2 = {
  ...obj1,
  a: 5
}
console.log(obj2)

 

 

函数也可以实现强制结构,将函数中arguments类数组对象转换为普通数组

const fun = function() {
  var arr = [...arguments]
  console.log(arr)
}
fun(1,2,3,4,5,6,7)

 

 字符串也可以解构和赋值

var  [a, b, c, d, e] = 'hello';
console.log(a,b,c,d,e)

 

posted @ 2021-10-23 21:42  keyeking  阅读(53)  评论(0编辑  收藏  举报