前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[你必须知道的JavaScript]解构赋值

[你必须知道的JavaScript]解构赋值

作者头像
爱吃大橘
发布2022-12-27 14:07:32
1.2K0
发布2022-12-27 14:07:32
举报
文章被收录于专栏:前端笔记薄

概念

解构赋值语法是一种 Javascript 表达式。通过解构赋值, 可以将 属性/值 从 对象/数组中 取出,赋值给其他变量。

数组解构

代码语言:javascript
复制
let [a,b]=[1,2]
// a = 1
// b = 2

在react中经常用于const [value,setValue]=useState('')

将剩余数组赋值给一个变量

当解构一个数组时,可以使用剩余模式,将数组剩余部分赋值给一个变量。

代码语言:javascript
复制
var [a, ...b] = [1, 2, 3];
// a = 1
// b = [2, 3]

解构默认值

如果解构取出的值是undefined,可以设置默认值:

代码语言:javascript
复制
let a, b;
// 设置默认值
[a = 9, b = 7] = [1, 2];
// a = 9
// b = 7

交换变量

在一个解构表达式中可以交换两个变量的值。

没有解构赋值的情况下,交换两个变量需要一个临时变量(或者用低级语言中的XOR-swap技巧)。

代码语言:javascript
复制
var a = 1;
var b = 3;

[a, b] = [b, a];
// a = 3
// b = 1
忽略某些返回值

你也可以忽略你不感兴趣的返回值:

代码语言:javascript
复制
function f() {
  return [1, 2, 3];
}

var [a, , b] = f();
// a = 1
// b = 3

甚至可以忽略全部:

代码语言:javascript
复制
[,,] = f();

解构对象

重命名且赋默认值
代码语言:javascript
复制
const { a:k = 2 } = { a: 1 }
// k = 1
const { a:k = 2 } = { a: null }
// k = null
const { a: k = 2 } = { a: undefined }
// k = 2

上面那么仔细,下面简单点:

嵌套对象和数组解构
代码语言:javascript
复制
// 
const metadata = {
  title: 'Scratchpad',
  translations: [
    {
      locale: 'de',
      localization_tags: [],
      last_edit: '2014-04-14T08:43:37',
      url: '/de/docs/Tools/Scratchpad',
      title: 'JavaScript-Umgebung'
    }
  ],
  url: '/en-US/docs/Tools/Scratchpad'
};

let {
  title: englishTitle, // rename
  translations: [
    {
       title: localeTitle, // rename
    },
  ],
} = metadata;

console.log(englishTitle); // "Scratchpad"
console.log(localeTitle);  // "JavaScript-Umgebung"
对象属性名解构
代码语言:javascript
复制
let key = "z";
let { [key]: foo } = { z: "bar" };

console.log(foo); // "bar"
无效的 JavaScript 标识符作为属性名称

通过提供有效的替代标识符,解构可以与不是有效的JavaScript标识符的属性名称一起使用。

代码语言:javascript
复制
const foo = { 'fizz-buzz': true };
const { 'fizz-buzz': fizzBuzz } = foo;
// 以下写法,js语法会报错,所以用上面的
// const { fizz-buzz: fizzBuzz } = foo;
console.log(fizzBuzz); // true

参考文章:

MDN

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概念
    • 数组解构
      • 将剩余数组赋值给一个变量
    • 解构默认值
      • 交换变量
        • 忽略某些返回值
        • 重命名且赋默认值
        • 嵌套对象和数组解构
        • 对象属性名解构
        • 无效的 JavaScript 标识符作为属性名称
    • 解构对象
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档