# 1.下列通过解构赋值,无法获取到对应值的选项是?(选择一项)

A.DFt9Gq.png (opens new window)

B.DFtALF.png (opens new window)

C.DFt1sO.png (opens new window)

D.DFtYod.png (opens new window)

参考解析:

本题主要考查数组解构赋值。

数组解构赋值遵守模式匹配,即:等号两边的模式相同。

等号左边是数组,等号右边也必须是数组。B选项左边是对象,无法进行解构,所以本题答案为B.

# 2.下面这段代码运行结果是?(选择一项)

DFtRWq.png (opens new window)

**A.**2

B."b"

**C.**undefined

**D.**报错

参考解析:

本题主要考察数组解构赋值的默认值。

只有数组中为undefined的时候,才可以取默认值,但是本题代码中,arr=[1,2,3,4],b对应的值并不是undefined,因此会取到与b对应的2,所以本题答案为A.

# 3.下图所示代码,输出的结果是?(选择一项)

image-20201115195556413

**A.**7

**B.**5

**C.**1

**D.**NaN

本题主要考查数组解构的默认值。

数组解构时,匹配结果严格等于undefined时,默认值才会生效。

本题代码中,调用fn传入的参数1和null都不严格等于undefined,所以a、b的默认值都没有生效,a的匹配结果是1,b的匹配结果是null。

null在参与运算时,默认会转换成数值0,a+b的最终结果为1,所以本题答案为C.

# 4.下面代码书写正确的选项是?(选择两项)

A.DFU5a4.png (opens new window)

B.DFUvZD.png (opens new window)

C.DFaPzt.png (opens new window)

D.DFaaWR.png (opens new window)

本题主要考查箭头函数和数组解构赋值的综合运用。

调用函数没有传入数组时,a = b这句代码,使用b作为默认值时,b还没有声明,会出现报错,A选项错误。但是先声明b,然后将b作为a的默认值,是符合语法的,B选项正确。

函数参数的解构赋值相当于[b = 1, a = b] = arr,是一句表达式,不属于单个参数,箭头函数的()不可以省略,C选项错误。

单行函数体时,可以省略花括号,D选项正确。

所以本题答案为BD.

# 5.根据如下代码,下列哪一项是错误的?(选择一项)

DFdJjP.png (opens new window)

**A.**foo输出的值是aaa

**B.**bar输出的值是bbb

**C.**baz输出的值是undefined

**D.**baz输出的值是bbb

本题主要考察对象的解构赋值。

对象的解构赋值中,与顺序无关,需要注意的是,变量名与属性名必须一致。

本题代码中foo解构后对应的值为aaa,bar解构后对应的值为bbb,baz解构后对应的值为undefined,所以D选项说法是错误的,本题答案为D.

# 6.关于如下代码下列说法正确的是?(选择一项)

DFwYG9.png (opens new window)

**A.**console.log(foo)得到aaa

**B.**console.log(baz)得到aaa

**C.**console.log(baz)得到bbb

**D.**console.log(bar)得到bbb

本题代码主要考察对象解构赋值。

对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。

本题代码中,真正被赋值的是变量baz,而不是模式foo,真正被赋值的是后者,而不是前者。所以本题答案为B.

# 7.以下哪一个选项的代码,可以使arr数组中的元素保持不变?(选择一项)

DFBitg.png (opens new window)

**A.**const obj = {}

**B.**const obj = {arr: arr}

**C.**const obj = {test: arr}

**D.**const obj = {test: undefined}

本题主要考查解构赋值的默认值是表达式时,遵循惰性求职的原则。

惰性求值指的是只有用到时,才会去求值,所以当test使用默认值,就会执行arr.pop(),删除数组最后一项元素,改变arr的值。

obj为空对象,对象解构时test使用默认值,A选项错误。

obj对象中test属性值为arr数组,可以正常解构,不会使用默认值d,B选项错误。

obj对象中没有test属性,对象解构时test使用默认值, C选项正确。

obj对象中test属性为undefined,对象解构时test使用默认值,D选项错误。

所以本题答案为C。

# 8.关于对象解构的自定默认值生效的条件是?(选择一项)

**A.**只要设置默认值就可以生效

**B.**只有匹配到undefined的时候才会使用默认值

**C.**只有匹配到null的时候才会使用默认值

**D.**在匹配到null或者匹配到undefined的时候会使用默认值

本题主要考察对象解构赋值的默认值,

对象解构中,只有匹配到undefined的时候会使用默认值,所以本题答案为B.

# 9.下列选项中,对已声明变量进行对象的解构赋值正确的是?(选择一项)

A.DFrJw6.png (opens new window)

B.DFry0P.png (opens new window)

C.DFrfpQ.png (opens new window)

D.DFromq.png (opens new window)

本题主要考察对已声明变量进行对象的解构赋值。

先声明变量,然后在进行解构赋值,整个解构必须使用圆括号包裹起来,否则会报错,因为解析器会将起首的大括号,理解成一个代码块,而不是赋值语句,A选项正确,BD选项错误。

const 声明的是常量,不能先声明后赋值,C选项错误。

所以本题答案为A.

# 10.关于对象解构赋值与数组的解构赋值,下列说法错误的是?(选择一项)

**A.**数组的解构赋值中,给对应位置的变量声明对应位置的值,变量的取值由位置决定

**B.**变量名与属性名一一对应,次序不重要

**C.**对象的解构赋值中,变量名必须与属性名不一致时,会是undefined

**D.**对象解构赋值与数组的解构赋值,都是要由次序有关

本题主要考察对象和数组的解构赋值。

对象的解构赋值中,与顺序无关,需要注意的是,变量名与属性名必须一致,D选项描述错误**,所以本题答案为D.**