【ES6】-- 解构赋值超详解

33 篇文章 1 订阅
5 篇文章 0 订阅

解构

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构,解构的本质属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。如果解构不成功,变量的值就等于undefined。

注意:

  • 解构赋值等号右侧必须存在

  • 等号右侧不是数组或者对象时,会先转换成对象,再继续操作。如果是 null、 undefined则抛出错误

数组解构

等号左边的变量放到中括号内部,匹配右侧数组中的元素

1.完全解构 

let [a,b,c,d] = [1,2,3,4]
console.log(a,b,c,d);  // 1 2 3 4
let [a,b,c,d,e] = [1,2,3,[4,5],6];
console.log(a,b,c,d,e);  // 1 2 3 [ 4, 5 ] 6

2.不完全解构

let [a,b,c,[d],e]=[1,2,3,[4,5,6],7];
console.log(a,b,c,d,e);  // 1 2 3 4 7

3.默认值解构

let [a=1,b=2,c=3]=[4,5,6];
console.log(a,b,c);  // 4 5 6
let [a=1,b=2,c=3]=[];
console.log(a,b,c); // 1 2 3

      默认值也可以是函数 

    function test(){console.log('hello')}
    // let [a=test()]=[1];
	// console.log(a);  // 1
	let [a=test()]=[];
	console.log(a);  // hello  undefined

4.集合解构

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

5.拓展运算符

let arr = [1,2,3,4,5]
let [...a] = arr;
console.log(arr);  // [ 1, 2, 3, 4, 5 ]
console.log(a);    // [ 1, 2, 3, 4, 5 ]
console.log(a==arr);  // false

注意:拓展运算符用在左侧是聚合,用在右侧是展开。

let arr = [1,2,3,4];
// 拓展运算符用在左侧是聚合,用在右侧是展开
let [...a] = arr;
console.log(a); // [ 1, 2, 3, 4 ]
let obj = {name:"zzy", age:17}
let obj1 = {gender:"female"};
let temp = {
    ...obj,
    ...obj1,
}
console.log(temp);  // { name: 'zzy', age: 17, gender: 'female' }

对象解构

等号左边的变量放到大括号内部,匹配右侧对象中的元素,对象的属性没有次序

1.属性名必须与变量名一致才能取到正确的值

let {name,age} = {name:"zzy", age:19}

console.log(name, age);  // zzy 19

 2.属性名与变量名不一致 给属性名重命名

let {name:a,age:b} = {name:"zzy", age:19}

console.log(a, b);  // zzy 19

 3.嵌套结构

let obj = {p:["hello",{y:"world"}]};

let {p:[h,{y:w}]} = obj;

console.log(h,w);  // hello world

4.默认值结构

   let {x:y=3}={};
    console.log(y); // 3

经典面试题:

    const [a, b, c, ...d] = [1, 2, 3, 11, 999];
    const { e, f,f1, g, ...h } = { f: 4, g: 5, i: 6, j: 7 };
    console.log(a, b, c, d, e, f1, g, h);
    // 1 2 3 [ 11, 999 ] undefined undefined 5 { i: 6, j: 7 }

字符串解构

 1.使用数组进行字符串解构

let [a,b,c,d,e] = "hello";
console.log(a,b,c,d,e);  // h e l l o

 2.使用拓展运算符解构

let [...arr] = "world";
console.log(arr); // [ 'w', 'o', 'r', 'l', 'd' ]

3.使用对象解构字符串

let {toString, valueOf, length} = 'hello';  //相当于把‘hello’当成String基本包装器类型
console.log(toString, valueOf, length);  // [Function: toString] [Function: valueOf] 5

数值解构  

可以获取到数值包装器构造函数原型中指定的方法。

let {toString,valueOf}=10;
console.log(toString,valueOf)
//[Function: toString] [Function: valueOf]


布尔值解构

    let {toString,valueOf}=true;
    console.log(toString,valueOf);
    // [Function: toString] [Function: valueOf]

注意:

在解构赋值时,如果等号右边是数值或者布尔值,则会先转换成为对象,再进行赋值解构的规则:只要等号的右边不是对象或者数组,都会先将其转换成对象(注:undefined和null无法转换成对象,对其进行赋值时都会报错)

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在JavaScript中,赋值是一种方便的语法,可以将数组或对象中的成员出来并赋值给变量。对于数组,可以使用方括号来指定要的变量,然后将数组的对应元素赋值给这些变量。例如,如果我们有一个存放了名字和姓氏的数组`arr`,我们可以使用赋值将数组的元素赋值给对应的变量。\[2\] 在对象中,我们可以使用花括号来指定要的变量,然后将对象的对应属性值赋值给这些变量。例如,如果我们有一个对象`obj`,其中包含`name`和`age`属性,我们可以使用赋值将这些属性值赋值给对应的变量。\[1\] 此外,我们还可以将`.entries()`方法与语法一同使用,来遍历一个对象的键值对。这个方法返回一个包含对象的键值对的数组,然后我们可以使用赋值将键和值分别赋值给对应的变量。\[3\] 希望这个答对你有帮助! #### 引用[.reference_title] - *1* [赋值(数组、对象)](https://blog.csdn.net/qq_50260510/article/details/129927253)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [ES6 --- 赋值(数组,对象,函数)使用详解](https://blog.csdn.net/m0_52409770/article/details/123096308)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值