1、解构赋值
允许指定默认值
<script>
let [a = true] = [];
console.log(a)// true
</script>
<script>
let [x, y = 'b'] = ['a']; // x='a', y='b'
console.log(x,'+',y)// a + b
</script>
2、数组成员严格等于 undefined,默认值生效
默认值生效
<script>
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'
console.log(x,'+',y)// a + b
</script>
默认值生效
<script>
let [x = 1] = [undefined];//x=1
</script>
3、默认值不生效:数组成员是null,默认值就不会生效,因为null不严格等于undefined
<script>
let [x = 1] = [null];//x= null
</script>
4、如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候,才会求值
<script>
function f() {
console.log('aaa');
}
let [x = f()] = [1];
console.log(x)//x=1因为x能取到值,所以函数f根本不会执行
</script>
<script>
function f() {
console.log('aaa');
}
let [x = f()] = [undefined];
console.log(x)//函数f根本执行--x未定义undefined
</script>
5、默认值可以引用解构赋值的其他变量,但该变量必须已经声明
<script>
let [x = 1, y = x] = []; // x=1; y=1
// let [x = 1, y = x] = [2]; // x=2; y=2
// let [x = 1, y = x] = [1, 2]; // x=1; y=2
// let [x = y, y = 1] = []; // ReferenceError: y is not defined
</script>