解构赋值 中

117 阅读3分钟

这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战

前言

ECMAScript 6.0 简称ES6 , 是 JavaScript 语言的新一代的标准,于在 2015 年 6 月发布,正式名称就是《ECMAScript 2015 标准》。

一般情况,ES6 一个泛指, 5.1版以后的 JavaScript 的下一代标准,涵盖了 ES2015、ES2016、ES2017、ES2018、ES2019、ES2020、ES2021 等等

上篇我们讲到了对象,数组(Set,Generator函数,类数组)的结构,我们今天继续字符串,数字,布尔值等的解构。

字符串的解构

字符串的结构,你可以认为是 String对象的解构。

因为字符串可以用下标访问字符, 所以用数组解构,得到的是对应位置的字符。

const [p, e, r, s, o , n] = 'person';

console.log(p,e,r); // p e r

其次还可以用对象结构,获得原型上的方法。

const {length, slice} = "person"
console.log(length); // 6
console.log(slice);  // ƒ slice() { [native code] }

数字的解构

数字的解构,本质是对 Number对象的解构。

我们先尝试数组解构

const [num1] = 123;

image.png

理所当然报错,但是我们可以解构到原型上的方法。

const { toFixed } = 123;
console.log(toFixed); 
// ƒ toFixed() { [native code] }

布尔值的解构

和数字的解构非常类似,不做过多的阐述。

null, undefined

null和undefined是无法转为为对象的,所以并不能进行解构。

const {p} = null;
const {p2} = undefined
// VM2042:1 Uncaught TypeError: Cannot destructure property 'p' of 'null' as it is null.
// VM2127:1 Uncaught TypeError: Cannot destructure property 'p2' of 'undefined' as it is undefined.

image.png

BigInt的解构

其实原始数据类型,基本都是一个套路,转为对象然后进行解构。

const { constructor } = 1n;
console.log(constructor === BigInt) // true

Symbol的解构

其实原始数据类型,基本都是一个套路,转为对象然后进行解构。

我们看看怎么获取description

const symbol = Symbol.for("key");
const { description } = symbol;
console.log(description);  // key

参数的解构

参数同样分为对象结构和数组解构。

对象结构:

function log({id, name}){
    console.log(id, name)
}
log({id:10, name: "Tom"}) // 10, Tom

数组解构

function divide([num1, num2]){
    return num1/num2
}

解构还可以和默认值一起使用,

function log({id = 1, name = "tom"} = {id:100, name: "jim"}){
    console.log(id, name)
}
log() // 100, jim

log(null)
  1. log()
    因为没传递任何值,{id:100, name: "jim"} 生效

  2. log(null) 默认值,只有值是undefined才生效 image.png

  3. log({})
    因为有值,{id = 1, name = "tom"}生效,最后输出为 1, tome

  4. log({id: 10})
    因为有值,{id = 1, name = "tom"}生效,但是name属性没有传递,默认值生效,最终输出 10, tom

还有一种比较隐蔽的参数结构,就是高阶函数时,参数的解构。

var arr = [[1,2],[3,4]];
var result = arr.map( ([a,b])=> a*b);
console.log(result); // [2, 12]

小结

基本都是一个套路

  1. null 和 undefined不能解构
  2. 其他基础数据类型转为对象,进行解构
  3. 如果已经是对象或者数组,直接进行解构

今天你收获了吗?