变量的解构赋值

算法调参侠
• 阅读 1606

解构赋值

解构赋值是ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值;

解构赋值主要有一下几种

数组的解构赋值

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

允许有默认值

let [foo = true] = [];
foo//true

let [x,y='b'] = ['a']; //x='a';y='b';

对象的解构赋值

对象的解构和数组不同的地方是,数组的元素必须是按次序排列的,变量的值由它的位置决定;对象的属性是无序的,变量名与属性名相同就可以了。

let {foo, bar} = {foo: 'aaa', bar: 'bbb'};
foo//'aaa'
bar//'bbb'

如果变量名和属性名不一致,或者想要给这个变量名和属性名不一样,可以这样使用。

var {foo: baz} = {foo: 'aaa', bar:'bbb'}
bar//'aaa'

这相当于给给变量赋值,而且变量名不需要和属性名一样。

如果对一个已经声明的变量,需要谨慎

let x;
{x} = {x: 1};//SyntaxError

因为Javascript引擎会将{x}理解成一个代码块,从而发生语法错误。

({x} = {x:1})

字符串解构赋值

let [a,b,c,d,e] = 'hello';
a//'h'
b//'e'

类似数组的对象都有一个length属性,因此可以对这个属性解构赋值

let {length: len} = 'hello';
len//5

数值和布尔值的解构赋值

let {toString: s} = 123;
s === Number.prototype.toString // true

let {toString: s} = true;
s === Boolean.prototype.toString // true

函数参数的解构赋值

function add([x, y]){
  return x + y;
}

add([1, 2]); // 3

ES6内部使用的是严格相等运算符(===),判断一个位置是否有值。如果一个组员不严格等于undefined,默认值是不会生效的。

let [x=1] = [undefined];
x//1

let [x=1] = [null];
x//null

let {x=3} = {x: undefined};
x//3

let {x=3} = {x:null};
x//null;



变量的解构赋值的用途

  • 交换变量的值

    let x = 1; let y = 2;
    [x, y] = [y, x];
  • 从函数中返回多个值

// 返回一个数组


function example() {
  return [1, 2, 3];
}
let [a, b, c] = example();

// 返回一个对象

function example() {
  return {
    foo: 1,
    bar: 2
  };
}
let { foo, bar } = example();
    
  • 函数参数的赋值

  • 提取JSON数据

  • 函数参数的默认值。

       指定了默认值,就可以避免在函数体内写var foo = foo || "init".
  • 遍历Map结构。

       任何部署了Iterator接口的对象,都可以用for...of循环遍历。
    
点赞
收藏
评论区
推荐文章
翼
4年前
ES6的解构赋值是深拷贝or浅拷贝?
面试时候有面试官问到ES6的解构赋值是深拷贝还是浅拷贝?,这里做一个总结.ES6的解构赋值,大家应该都清楚,就是可以快速取出数组或者对象中的值;我们先来看一个使用案例:更多的解构赋值知识可以查看:https://es6.ruanyifeng.com/docs/destructuring那么,ES6的解构赋值到底是深拷贝还是浅拷贝呢?我们先来看一下深拷贝和浅
Karen110 Karen110
4年前
盘点JavaScript中解构赋值,数组解构常用的数组操作
大家好,我是进阶学习者。前言解构赋值:是一种特殊的语法,它使可以将数组或对象“拆包”为到一系列变量中,因为有时候使用变量更加方便。解构操作对那些具有很多参数和默认值等的函数也很奏效。一、数组解构下面是一个将数组解构到变量中的。例://有一个存放了名字和姓氏的数组letarr现在就可以针对这些变量
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
4年前
Python基础(二)
1.赋值语句(1)作用:定义赋值(2)复合与链式赋值ab2a2(3)特殊类型的赋值序列的赋值:a,b,c(1,2,3)print(a,b,c)变量交换:a
可莉 可莉
4年前
008_Node中的require和import
一、js的对象的解构赋值(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fdeveloper.mozilla.org%2FenUS%2Fdocs%2FWeb%2FJavaScript%2FReference%2FOperators%2FDestructuring_assignment)
Wesley13 Wesley13
4年前
ES6编程风格
1、块级作用域使用let和const2、解构赋值letarr\1,2,3,4,5,6,7,8,9\;let\a,b,c\arr;letobj{foo:'aaa',bar:'bbb'};let{bar,foo}obj;//bar等于'bbb',foo等于'aaa'(
Wesley13 Wesley13
4年前
ES6新语法(二)
1.解构在ES6中,可以使用解构从数组和对象提取值并赋值给独特的变量,即将数组或对象中的值,拆成一个一个变量。解构:自动解析数组或对象中的值,并赋值给指定的变量。、1.1数组解构vararr3,4,5;vara,b,carr;
Wesley13 Wesley13
4年前
ES6——对象解构和数组解构
为何使用解构功能  在ES5及早期版本中,开发者们为了从对象和数组中获取特定数据并赋值给变量,编写了许多看起来同质化的代码,如下:letoptions{repeat:true,save:false};//从对象中取数据letrepeatoptions.repeat,saveoptions
Wesley13 Wesley13
4年前
ES6解构赋值常见用法
解构赋值出现的契机:letobj{a:1,b:2}//取值letaobj.aletbobj.b问题核心:每次取值既要确定对象属性名,还得重新定义一个变量占用多一
Stella981 Stella981
4年前
SpringBoot使用@Value给静态变量注入值,不能正确读取相应的值
今天在调试代码的时候发现SpringBoot中使用@Value()给变量赋值,给普通变量赋值是可以的,但是给静态变量即static变量赋值的时候,读取不到相应的值,如果是字符串会读取为null,数字值会读取为0.网上查了一下才发现不能直接给static变量赋值。1、SpringBoot中使用@Value()给普通变量注入值:在applica
可莉 可莉
4年前
20个常用的JavaScript简写技巧
任何编程语言的简写技巧都能够帮助你编写更简练的代码,让你用更少的代码实现你的目标。让我们一个个来看看JavaScript的简写技巧吧。1\.声明变量//Longhandlet x;let y20;//Shorthandlet x,y20;2\.给多个变量赋值我们可以使用数组解构来在一行中给
算法调参侠
算法调参侠
Lv1
雁啼红叶天,人醉黄花地,芭蕉雨声秋梦里。
文章
4
粉丝
0
获赞
0