IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> ES6解构赋值(数组,对象,函数) -> 正文阅读

[JavaScript知识库]ES6解构赋值(数组,对象,函数)

目录

数组的解构赋值

基础写法(完全解构)

不完全解构

?解构失败

设置占位 ?

设置解构默认值

?对象的解构赋值

完全解构

不完全解构

解构失败

函数的解构赋值?

完全解构

不完全解构

解构失败

解构失败 设置默认值

设置默认值完善版

完善版


定义:解构赋值是ES6中提供的一种新操作,这种操作 可以将数组、对象中的数据取出来 并给变量赋值

  • 分类:

    • 数组的解构赋值

    • 对象的解构赋值

    • 函数的解构赋值

数组的解构赋值

基础写法(完全解构)

//目前有一个现成的数组
let arr = ["爱新觉罗","故里","西欧安家"];
//现在我想声明三个变量a、b、c 分别赋值为 数组中的数组项
let [a,b,c] = arr;

数组的解构赋值 就是根据对应关系 将等号右侧的数组中的数组项 赋值给等号左侧数组中的变量

不完全解构

//目前有一个现成的数组
let arr = ["张三","李四","王五"];
//现在我想声明三个变量a、b、c 分别赋值为 数组中的数组项
let [a,b] = arr;
console.log(a,b)//张三 李四

当声明的变量个数 少于数组项个数的时候 就是不完全解构 不完全解构 会按照顺序 将数组中的数组项赋值给 变量

?解构失败

//目前有一个现成的数组
let arr = ["张三","李四","王五"];
//现在我想声明三个变量a、b、c 分别赋值为 数组中的数组项
let [a,b,c,d] = arr;
console.log(a,b,c,d)//张三 李四 王五 undefined

当声明的变量个数 多于 数组项个数的时候 就是解构失败 按照顺序赋值 多出来的变量 值为undefined

设置占位 ?

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

数组的解构赋值 也可以使用占位 来达到我们想要将指定值赋值给变量的目的

设置解构默认值

//目前有一个现成的数组
let arr = ["张三","李四","王五"];
//现在我想声明三个变量a、b、c 分别赋值为 数组中的数组项
//给d变量设置默认值
let [a,b,c,d="替身"] = arr;
console.log(a,b,c,d)//张三 李四 王五 替身

注意:如果我们没有给变量赋值 变量就会使用默认值 如果我们给变量赋值了 即便变量有默认值 也会使用我们后来赋的值

?对象的解构赋值

完全解构

let obj = {
    name:"张三",
    age:40,
    gender:"纯爷们",
    hobbies:["钱","房","车","权","人"]
}
//声明四个变量a,b,c,d 将四个属性 分别赋值给 四个变量
let {name:a,age:b,gender:c,hobbies:d} = obj
console.log(a,b,c,d);

简写形式:当声明的变量名 和 属性名相同的时候 我们可以简写

let obj = {
    name:"张三",
    age:40,
    gender:"纯爷们",
    hobbies:["钱","房","车","权","人"]
}
//声明四个变量a,b,c,d 将四个属性 分别赋值给 四个变量
let {name,age,gender,hobbies} = obj
console.log(a,b,c,d);

不完全解构

let obj = {
    name:"张麻子",
    age:40,
    gender:"纯爷们",
    hobbies:["钱","当县长","公平","夫人","没有黄老爷"]
}
//声明四个变量a,b,c,d 将四个属性 分别赋值给 四个变量
let {name,age,gender} = obj
console.log(name,age,gender);//张麻子 40 纯爷们

不完全解构就是 声明变量的个数 少于属性的个数 按照对应关系 将属性值 赋值给 变量

解构失败

let obj = {
    name:"张麻子",
    age:40,
    gender:"纯爷们",
    hobbies:["钱","当县长","公平","夫人","没有黄老爷"]
}
//声明四个变量a,b,c,d 将四个属性 分别赋值给 四个变量
let {name,age,gender,skills:skills} = obj
console.log(name,age,gender,skills);//张麻子 40 纯爷们 undefined

解构失败 是 声明的变量赋的属性值 在对象中不存在 这个时候 由于用来赋值的属性 在对象中不存在 因此 属性值为 undefined 所以 变量赋的值就是undefined

函数的解构赋值?

解构赋值就是将数组或对象的内容拆出来 赋值给变量

在函数中 只有形参实参系统 涉及到 变量赋值 因此 函数的解构 解构的是形参和实参

完全解构

let obj = {name:"张三",age:18}
//在函数中 设置两个形参 name 和  age  分别赋值为  obj对象中的 name和age属性
//let{属性名:变量,属性名:变量,...} = 对象
function fn({name,age}){
    console.log(name);
    console.log(age);
}
fn(obj)

函数的解构 就是形参实参的解构 ,相当于

function fn({name,age}){
    //声明形参 相当于在函数中声明变量
    //写入实参 相当于给形参声明的变量赋值
    //let {name,age} = obj
    console.log(name);
    console.log(age);
}
fn(obj)

不完全解构

let obj = {name:"张三",age:18}
//在函数中 设置一个形参 name 分别赋值为  obj对象中的 name属性
//let{属性名:变量,属性名:变量,...} = 对象
function fn({name}){
    console.log(name);
}
fn(obj)

相当于

function fn({name}){
    //let {name} = {name:"张三",age:18}
    console.log(name);
}
fn(obj)

解构失败

就是声明的变量 没有对应的属性来赋值

let obj = {name:"张三",age:18}
//在函数中 设置一个形参 name 分别赋值为  obj对象中的 name属性
//let{属性名:变量,属性名:变量,...} = 对象
function fn({name,skills}){
    console.log(name);
    console.log(skills);
}
fn(obj)

相当于

function fn({name,skills}){
    //let {name:name,skills:skills} = {name:"张三",age:18}
    console.log(name);
    console.log(skills);
}
fn(obj)

解构失败 设置默认值

let obj = {name:"张三",age:18}
//在函数中 设置一个形参 name 分别赋值为  obj对象中的 name属性
//let{属性名:变量,属性名:变量,...} = 对象
function fn({name,skills:skills=默认值}){
    console.log(name);
    console.log(skills);
}
fn(obj)

注意:默认值 都是我们没有值来给变量赋值的时候 才使用 如果有值 就不使用默认值了

设置默认值完善版

let obj = {name:"张三",age:18}
//在函数中 设置一个形参 name 分别赋值为  obj对象中的 name属性
//let{属性名:变量,属性名:变量,...} = 对象
function fn({name,skills:skills=默认值}){
    console.log(name);
    console.log(skills);
}
fn()

如上述代码所示 如果用户在调用函数的时候 忘记传参想,相当于

let obj = {name:"张三",age:18}
//在函数中 设置一个形参 name 分别赋值为  obj对象中的 name属性
//let{属性名:变量,属性名:变量,...} = 对象
function fn({name,skills:skills=默认值}){
    //let {name,skills} = undefined
    console.log(name);
    console.log(skills);
}
fn()

完善版

let obj = {name:"张三",age:18}
//在函数中 设置一个形参 name 分别赋值为  obj对象中的 name属性
//let{属性名:变量,属性名:变量,...} = 对象
function fn({name,skills:skills=默认值} = {}){
    console.log(name);
    console.log(skills);
}
fn()

相当于

//如果用户没传参
function fn({name,skills:skills=默认值} = {}){
    //let {name,skills} = {}  变量使用默认值
    console.log(name);
    console.log(skills);
}
fn()

//如果用户传参
function fn({name,skills:skills=默认值} = {}){
    //let {name,skills} = {}
    //let {name.skills} = obj
    console.log(name);
    console.log(skills);
}
fn(obj)

?

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:47:38  更:2022-09-24 20:53:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:07:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码