【ES6】—解构赋值

news/2024/7/10 23:13:21 标签: es6, javascript, 前端

在这里插入图片描述

一、定义

解构赋值:解构赋值就是一种模式的匹配,只要等号两边的模式完全相同的,那么左边的变量就会被赋值对应右边的值

二、数组的解构赋值

PS:数组解构赋值时,是通过索引的唯一性赋值的

1. 一维数组解构赋值

(1). ES5 的写法

javascript">let arr = [1,2,3]
let a = arr[0];
let b = arr[1];
let c = arr[2];
console.log(a, b, c)

(2). ES6 的写法

javascript">let [a,b,c] = [1,2,3]
console.log(a,b,c)
// 1 2 3

2. 多维数组的解构赋值

  1. ES6的写法
javascript">let [a,b, [d,f]] = [1,2, [3,4]]
console.log(a,b,d,f)
// 1 2 3 4
  1. 当左右两边的结构模式不匹配时,按照左边变量对应索引的位置赋值
javascript">let [a, b, [d]] = [1,2,[3,4]]
console.log(a, b, d)
// 1 2 3
  1. 左边的变量被赋值可以是任意类型
javascript">let [a, b, d] = [1,2,[3,4]]
console.log(a, b, d)
// 1 2 [3,4]
  1. 当左边的变量多于右边的值时,多余的变量 = undefined
javascript">let [a,b,d, e] = [1, 2, [3, 4]]
console.log(a, b, d, e)
// 1 2 [3, 4] undefined
  1. 设置多余变量的默认值
javascript">let [a,b,d, e = 5] = [1, 2, [3, 4]]
console.log(a, b, d, e)
// 1 2 [3, 4] 5
  1. 当左边变量设置默认值,右边又有对应的值,以右边传过来的值为准
javascript">let [a,b,d, e = 5] = [1, 2, [3, 4], 6]
console.log(a, b, d, e)
// 1 2 [3, 4] 6

三、基于对象的解构赋值

1. ES5的赋值方式

javascript">let user = {
	name: 'xiaoxiao',
	age: 30
}
let name = user.name
let age = user.age
console.log(name, age)
// xiaoxiao 30

2. ES6的解构赋值

  1. 对象解构赋值
javascript">let user = {
	name: 'xiaoxiao',
	age: 30
}
let {name, age} = user
console.log(name, age)
// xiaoxiao 30
  1. 再对象解构赋值时,是通过对象key名称唯一性赋值的,跟解构顺序没有关系
javascript">let user = {
	name: 'xiaoxiao',
	age: 30
}
let {age, name} = user
console.log(name, age)
// xiaoxiao 30
  1. 给对象的属性起别名
javascript">let user = {
	name: 'xiaoxiao',
	age: 30
}
let {age: uage, name: uname} = user
console.log(uage, uname)
// xiaoxiao 30
console.log(age, name)
// Uncaught ReferenceError: age is not defined
// 原有属性名称访问不到, 未定义

四、字符串解构赋值

1. ES5的模式

javascript">let str = 'imooc'
for (let i = 0; i < str.length; i++) {
	console.log(str[i]);
}
// i m o o c

2. ES6的解构模式

javascript">let str = 'imooc'
let [a,b,c,d, e] = str
console.log(a,b,c,d, e)
// i m o o c

五、解构赋值的应用场景

  1. 数组给没有值的变量设置默认值
javascript">let [a, b, c =8] = [4,5]
console.log(a,b,c)
// 4 5 8
  1. 对象给没有值的变量设置默认值
javascript">let {name, age =18} = {name: 'xiaoxiao'}
console.log(name, age)
// xiaoxiao 18
  1. 对象解构的变量设置默认值,默认值的范围任意数据类型
    PS: 变量的默认值是惰性赋值,如果右侧有对应的值,左侧的默认值不会执行
javascript">function foo () {
	console.log(123)
}
let [a = foo()] = []
console.log(a)
// 1

右侧没有值时,左侧默认值才会执行

javascript">function foo () {
	console.log(123)
}
let [a = foo()] = []
console.log(a)
// 123
  1. 函数参数的解构
javascript">function foo ([a,b,c]) {
	console.log(a,b,c)
}
foo([1,2,3])
// 1 2 3
javascript">function foo ({name,age,school ='imooc'}) {
	console.log(name, age, school)
}
let obj ={
	name: 'xiecheng',
	age: 34
}
foo(obj)
// xiecheng 34 imooc
  1. 函数返回值 解构
javascript">function foo () {
	let obj = {
		name: 'xiecheng',
		age: 34,
		school: 'xxx'	
	}
	return obj
}
let {name, age} = foo()
console.log(name, age)
// xiecheng 34
  1. json 字符串解构
javascript">// json
let json = '{"name": "xiaoxiao", "sex": "男"}'
// 把json字符串转换为json对象
let {name, sex} = JSON.parse(json)
console.log(name, sex)
// xiaoxiao 男

http://www.niftyadmin.cn/n/4948349.html

相关文章

拍试卷去笔迹的方法分享,几个步骤轻松达成

在考试中&#xff0c;经常会出现填错或涂错选项的情况&#xff0c;而试卷又不能乱涂乱改。那么&#xff0c;如何有效地擦除填错的笔迹呢&#xff1f;本文将分享几种可以简单擦除试卷上填写笔迹的方法。 使用橡皮擦 使用橡皮擦是最为常见的擦除笔迹的方法。首先&#xff0c;需要…

c++11 标准模板(STL)(std::basic_stringbuf)(六)

定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::allocator<CharT> > class basic_stringbuf : public std::basic_streambuf<CharT, Traits> std::basic_stringbu…

【Elsevier旗下】1区SCI,5天见刊!稳定检索36年

近日国自然即将发布&#xff0c;想必申请过国自然基金作者都知道&#xff0c;需要有研究基础&#xff0c;说白了就是需要有文章支持。那么稿子写好了&#xff0c;选择一本靠谱优质期刊也是一门学问。 以下2本Elsevier 旗下审稿快刊&#xff0c;各项指标优秀&#xff0c;实为评…

ZLMediakit-method ANNOUNCE failed: 401 Unauthorized

使用ffmpeg推流&#xff1a; nohup ffmpeg -stream_loop -1 -re -i "/usr/local/mp4/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://10.55.134.12/live/test &[rootlocalhost ~]# ffmpeg -stream_loop -1 -re -i "/usr/local/mp…

Vue2集成Echarts实现可视化图表

一、依赖配置 1、引入echarts相关依赖 也可以卸载原有的&#xff0c;重新安装 卸载&#xff1a;npm uninstall echarts --save 安装&#xff1a;npm install echarts4.8.0 --save 引入水球图形依赖 npm install echarts-liquidfill2.0.2 --save 水球图可参考文档&#xff1…

【使用 k 折叠交叉验证的卷积神经网络(CNN)】基于卷积神经网络的无特征EMG模式识别研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Hyper-V】Windows11 家庭版怎么启用虚拟机Hyper-V

在电脑Windows11系统上启用虚拟机Hyper-V&#xff0c;打开 启用和关闭WIndows功能&#xff0c;找到其中一项Hyper-V&#xff0c;对于家庭版的系统用户来说&#xff0c;这个选项是没有的&#xff0c;接下来讲一讲怎么开启。 安装Hyper-V 创建一个文件名为Hyper-v.bat&#xff…

拒绝摆烂!C语言练习打卡第三天

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;每日一练 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、选择题 &#x1f4dd;1.第一题 &#x1f4dd;2.第二题 &#x1f4…