ES6_02_变量解构赋值

向量数据库大模型云通信

点击 “前端自学社区” 查看更多精彩

picture.image

1

变量解构赋值

  
定义:ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构  
  
这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。  
  
let [x, , y] = [1, 2, 3];  
x // 1  
y // 3  
  
let [head, ...tail] = [1, 2, 3, 4];  
head // 1  
tail // [2, 3, 4]  
  
let [x, y, ...z] = ['a'];  
x // "a"  
y // undefined      
z // []  
  
# 如果解构不成功,变量的值就等于undefined  

2

数组解构赋值

  
1. 解构赋值允许指定默认值。  
let [foo = true] = [];  
foo // true  
  
let [x, y = 'b'] = ['a']; // x='a', y='b'  
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'  

3

对象解构赋值

  
#定义: 对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。  
  
let { bar, foo } = { foo: 'aaa', bar: 'bbb' };  
foo // "aaa"  
bar // "bbb"  
  
let { baz } = { foo: 'aaa', bar: 'bbb' };  
baz // undefined  
  
  
# 注意  
1.对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量,然后这个变量就会拥有它的属性和方法  
// 例一  
let { log, sin, cos } = Math;  
  
// 例二  
const { log } = console;  
log('hello') // hello  
  
  
  
2. 变量名与属性名不一致,必须写成下面这样。(左边和右边不等时)  
  
let { foo: baz } = { foo: 'aaa', bar: 'bbb' };  
baz // "aaa"  
  
let obj = { first: 'hello', last: 'world' };  
let { first: f, last: l } = obj;  
f // 'hello'  
l // 'world  
  
# 对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。  

4

解构默认值

  
#默认值生效的条件是,对象的属性值严格等于undefined。  
  
  
var {x = 3} = {x: undefined};  
x // 3  
  
var {x = 3} = {x: null};  
x // null  

5

字符串解构赋值

  
const [a, b, c, d, e] = 'hello';  
a // "h"  
b // "e"  
c // "l"  
d // "l"  
e // "o"  
  
  
let {length : len} = 'hello';  
len // 5  

6

解构注意

  
#解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。  
由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。

7

函数参数解构赋值

  
function add([x, y]){  
  return x + y;  
}  
  
add([1, 2]); // 3  
  
  
  
# 参数指定默认值  
function move({x = 0, y = 0} = {}) {  
  return [x, y];  
}  
  
move({x: 3, y: 8}); // [3, 8]  
move({x: 3}); // [3, 0]  
move({}); // [0, 0]  
move(); // [0, 0]  

8

解构用途

1)交换变量的值  
(2)从函数返回多个值  
(3)函数参数的定义  
(4)提取 JSON 数据  
(5)函数参数的默认值  
(6)遍历 Map 结构  
(7)输入模块的指定方法  
const { SourceMapConsumer, SourceNode } = require("source-map");  

原创不易,如果觉得不错的话,点个赞哟

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
vivo 容器化平台架构与核心能力建设实践
为了实现规模化降本提效的目标,vivo 确定了基于云原生理念构建容器化生态的目标。在容器化生态发展过程中,平台架构不断演进,并针对业务的痛点和诉求,持续完善容器化能力矩阵。本次演讲将会介绍 vivo 容器化平台及主要子系统的架构设计,并分享重点建设的容器化核心能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论