变量的解构赋值

前言:

旧书不厌百回读,熟读精思子自知

参考文档:变量的解构赋值 · 语雀

解构异常

1.数组解构报错 --- 不是可遍历的结构

let [a] = 1; //Uncaught TypeError: 1 is not iterable
let [b] = false;//Uncaught TypeError: false is not iterable
let [c] = NaN;//Uncaught TypeError: NaN is not iterable
let [d] = undefined;//Uncaught TypeError: undefined is not iterable
let [e] = null;//Uncaught TypeError: null is not iterable
let [f] = {};//Uncaught TypeError: {} is not iterable

2.数组解构失败 --- 匹配不到变量,值等于undefined

let [a, b] = [];
console.log("a=>",a) //a=> undefined
console.log("b=>",b) //b=> undefined

3.对象解构报错

let {b} = undefined;//Uncaught TypeError: Cannot destructure property 'foo' of 'undefined' as it is undefined.
let {e} = null;//	 Uncaught TypeError: Cannot destructure property 'e' of 'null' as it is null.

4.对象解构失败 --- 匹配不到变量,值等于undefined

let {a} = 1;  //a=> undefined
let {b} = false;//b=> undefined
let {c} = NaN;//c=> undefined
let {f} = {};//f=> undefined

解构重命名

对象重命名:使用场景同一作用域解构同名变量时(let&const);

// 对象变量重命名
let {name:first,tag} = {name:"555",tag:"1222"};
console.log(name) // 
console.log(first)//555
console.log(tag) // 1222

let {name:second,tag:three} = {name:"666",tag:"777"};
console.log(second)//666
console.log(three) // 77

解构赋值

设置默认值注意事项:

1.对象设置默认值报错

let {one = "677"} = null; //Uncaught TypeError: Cannot read properties of null (reading 'one')
let {two = "677"} = undefined; //Uncaught TypeError: Cannot read properties of null (reading 'two')
let { data = []} = null;// Cannot read properties of null (reading 'data')

2.数组设置默认值报错

如果是解构报错,则无法进行设置默认值

let [a] = 1; //Uncaught TypeError: 1 is not iterable
let [b] = false;//Uncaught TypeError: false is not iterable
let [c] = NaN;//Uncaught TypeError: NaN is not iterable
let [d] = undefined;//Uncaught TypeError: undefined is not iterable
let [e] = null;//Uncaught TypeError: null is not iterable
let [f] = {};//Uncaught TypeError: {} is not iterable

总结:

由于解构会有异常情况, 则使的解构赋值存在一定的局限性;

// 假设请求接口获取一个列表数据(应该是一个数组),,返回结构如下:
const data = {
  tableList:[],
  totalCount:0
}
//使用解构复制
let { tableList = []} = data;
console.log("tableList",tableList)  // []
//但是难免会存在null情况
const data2 = {
  result:null,
  totalCount:0
}
let { result  = []} = data2;
console.log("result",result)  // result null 设置默认值失效

// 因为不符合数据结构,得在定一个补丁
const last = result || [];
console.log("last",last)  // result null 设置默认值失效

//再来看一个情况 ,没有数据返回的是 null
const { list = []} = null;
console.log("list",list) //Uncaught TypeError: Cannot read properties of null (reading 'list'
// 直接解构报错了,此时解构的局限性就体现出来了。

由此,解构赋值的时候,一定要避免解构报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值