变量解构赋值【ES6】

"路虽远行则将至,事虽难做则必成。"------ 《荀子·劝学》

目录

解构赋值是什么呢:

就是快速的从对象或者数组中取出成员的一个语法方式。

对数组解构:

javascript 复制代码
let arr = [1, 2, 3]
let [x, y, z] = arr;
console.log(x, y, z); //1 2 3

如何交换值的位置?

javascript 复制代码
let x = 1;
let y = 2;
[y, x] = [x, y];
console.log(x, y); //2 1

如果在数组中我只想拿到第三个数呢?

javascript 复制代码
let arr = [1, 2, 3]
let [, , z] = arr;
console.log(z); // 3

数组里有个数组,我想拿到数组里数组的第一个数?

javascript 复制代码
let arr = [1, [2, 4, 6], 3]
let [, [a]] = arr;
console.log(a); // 2

如果赋的值是空的输出什么,有办法设置默认值吗?

javascript 复制代码
let [a] = []
console.log(a); // undefined
let [x = 1] = []
console.log(x); // 1

对对象解构:

javascript 复制代码
 let obj = {
      name: 'kitty',
      age: 18
    }

let { name, age } = obj;
console.log(name, age); // kitty 18

如何交换位置会影响输出结果吗?

不会 因为是按照属性来找值的;对象是根据索引对应的。

javascript 复制代码
let obj = {
      name: 'kitty',
      age: 18
    }

let { age, name } = obj;
console.log(name, age); // kitty 18

可以只取一个值吗?我不想都取出来

sure!!!

javascript 复制代码
let obj = {
      name: 'kitty',
      age: 18
    }

let { name } = obj;
console.log(name); // kitty 
javascript 复制代码
let res = {
      code: 200,
      data: "xxxxxxxxxxxxx"
   }
let { data } = res;
console.log(data); //xxxxxxxxxxxxx

如果在同一作用域下有重名的变量该怎么办?

可以取别名(进行重命名)。

javascript 复制代码
let code = 'aaaaa';
let res = {
      code: 200,
      data: "xxxxxxxxxxxxx"
    }
let { data, code: co } = res;
console.log(data, co); //xxxxxxxxxxxxx 200

对于没有该属性的值打印一定是undefined,但是我们可以给它设置一个默认值。

javascript 复制代码
let code = 'aaaaa';
let res = {
      code: 200,
      data: "xxxxxxxxxxxxx"
    }
let { data, code: co, error = "没有错误" } = res;
console.log(data, co, error); //xxxxxxxxxxxxx 200 没有错误

如果后端有这个属性的值,则会被覆盖,输出后端返回的值。

如果对象里包含一个数组呢,我想拿到这个数组或者拿到数组里的每一项

javascript 复制代码
let code = 'aaaaa';
let res = {
      code: 200,
      data: {
        list: ['A', 'B', 'C']
      }
    }
let { data: { list } } = res;
console.log(list); //['A', 'B', 'C']
javascript 复制代码
let code = 'aaaaa';
let res = {
      code: 200,
      data: {
        list: ['A', 'B', 'C']
      }
    }
let { data: { list: [x, y, z] } } = res;
console.log(x, y, z); // A B C

在函数内传参:

javascript 复制代码
function getData () {
  let res = {
     code: 200,
     data: {
          list: ['A', 'B', 'C']
      }
   }
  test(res)
}

function test (res) {
   console.log(res);// {code: 200, data: {...}}
   // 可以在这里进行对象解构处理
   let { data: { list: [x, y, z] } } = res;
   console.log(x, y, z); //A B C
}
getData()

也可以在接收的时候直接解构。。。主要看项目具体是怎么样的

javascript 复制代码
function getData () {
      let res = {
        code: 200,
        data: {
          list: ['A', 'B', 'C']
        }
      }
      test(res)
}

function test ({ code, data }) {
      console.log(code, data); // 200 {list: Array(3)}
}
getData()
javascript 复制代码
function getData () {
      let res = {
        code: 200,
        data: {
          list: ['A', 'B', 'C']
        }
      }
      test(res)
}

function test ({ code, data: { list } }) {
      console.log(code, list); // 200  ['A', 'B', 'C']
}
getData()

对于字符串解构:

类似于数组解构

javascript 复制代码
let myname = 'kitty';
let [x, y, z] = myname;
console.log(x, y, z); // k i t

let { length } = myname;
console.log(length); // 5

当然也可以起别名(如果重名的话)

javascript 复制代码
let myname = 'kitty';
let [x, y, z] = myname;
console.log(x, y, z); // k i t

let { length: len } = myname;
console.log(len); // 5
相关推荐
不在逃避q25 分钟前
Trae/Vs Code/Cursor命令行无法跑npm命令
前端·arcgis·npm
夏殇之殁40 分钟前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
The Chosen One9851 小时前
高进度算法模板速记(待完善)
java·前端·算法
陈随易1 小时前
MoonBit抓包模块pcap,查看电脑的每一次联网通信
前端·后端·程序员
新中地GIS开发老师2 小时前
WebGIS开发学生作品|低空航天管理与航线规划系统
前端·javascript·webgis·三维gis开发
用户059540174462 小时前
大模型对话记忆持久化踩坑实录:用 Playwright 自动化测了 300 次,终于揪出会话丢失的真凶
前端·css
丙氨酸長鏈2 小时前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库
kyriewen3 小时前
面试官让我手写虚拟列表——AI生成的版本,快速滚动几下就白屏了
前端·javascript·面试
IT_陈寒3 小时前
Vite热更新失效?你可能漏了这个配置
前端·人工智能·后端
梅孔立4 小时前
两种免费的翻译API调用方式详解 - Edge官方API与个人缓存服务
前端·缓存·edge