旧书不厌百回读,熟读精思子自知
参考文档:变量的解构赋值 · 语雀
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
let [a, b] = []; console.log("a=>",a) //a=> undefined console.log("b=>",b) //b=> undefined
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.
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
设置默认值注意事项:
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')
如果是解构报错,则无法进行设置默认值
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' // 直接解构报错了,此时解构的局限性就体现出来了。
由此,解构赋值的时候,一定要避免解构报错。