# 1.下图代码执行后输出的结果是?(选择一项)

DIx1II.png (opens new window)

**A.**2

**B.**NaN

**C.**4

**D.**报错

参考解析:

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

arguments是普通函数中保存所有参数的一个类数组,但箭头函数中没有arguments,所以本题代码中,箭头函数f中的arguments指代的是普通函数foo中的arguments,通过数组解构赋值获取里面的值,即:arg1=2,那么最终返回的结果为4,所以本题答案为C

# 2,下图代码执行后输出的结果是?(选择一项)

DIxRL4.png (opens new window)

**A.**1 2 3

**B.**2 1 0

**C.**undefined 1 undefined

**D.**0 1 2

本题主要考查参数默认值和对象解构赋值的综合应用。

对象的解构赋值不会受到属性的排列次序影响,本题代码中针对传递的参数进行对象解构,属性名对应的值与位置无关,所以x值为0, y值为1,z值为2**,本题答案为D。**

# 3.下列代码执行结果是?(选择一项)

DIxbQO.png (opens new window)

**A.**imooc 4

**B.**imooc 5

**C.**undefined 5

**D.**undefined 4

本题主要考查对Set和Map的理解。

1、Map是一个键值对的集合,键名可以任意类型。

本题代码中创建的map对象,使用set方法使用的数组[1]和get方法中使用的数组[1],分别是不同的数组,只不过它们元素都是1而已,map.get([1])返回的结果是undefined。

2、Set是一个不会添加重复值的数据集合。

NaN与任何数据比较时默认都是不相等的,但有一个特殊情况,Set在添加数据时,默认两个NaN是相等的。本题代码的数组中第二个位置和最后一个位置的NaN属于重复值,只会添加一个;

第五个位置的"NaN"添加了引号,属于字符串,与其他两个位置的NaN不同,会添加到集合中。数值1重复了,只会添加一个值。

最终添加到Set集合中的值为1,NaN,2,"NaN",set.size的值为4,

所以最终打印结果是undefined 4,本题答案为D.

# 4.下列选项中,不可以使用for…of循环的是?(选择一项)

**A.**let arr = ['y', 'u', 'n', 'm', 'u']

**B.**let obj = {name: "xm", age: 18}

**C.**let str = 'yunmudsb'

**D.**let list = document.querySelectorAll('li')

参考解析:

本题主要考查for…of方法。

for...of循环可以使用的范围包括数组、Set 和 Map 结构、arguments对象,NodeList对象、以及字符串等。但是对于普通的对象(使用字面量和构造函数Object声明的对象),不能直接使用for...of遍历,会出现报错,所以一般会使用for…in方法循环普通对象。

A选项数组,C选项字符串、D选项NodeList对象,都可使用for…of循环。B选项是普通的对象,无法使用for…of循环,所以本题答案为B.

# 5.关于promise对象的状态,下列描述错误的是?(选择一项)

**A.**pending初始状态可以变成fulfilled成功状态

**B.**pending初始状态可以变成rejected失败状态

**C.**rejected失败状态可以变成fulfilled成功状态

**D.**fulfilled成功状态不可以变成rejected失败状态

本题主要考查promise对象的状态。

promise对象一共有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。

promise对象的状态改变,只有两种可能:(1)从pending变为fulfilled;(2)从pending变为rejected,AB选项正确。

状态一旦改变,就不会再改变了,rejected失败状态不可能再改变为fulfilled成功状态,C选项错误,D选项正确。

所以本题答案为C.

# 6.下图所示代码,运行结果是?(选择一项)

DIzlXF.png (opens new window)

**A.**3 err

**B.**2 err

**C.**3

**D.**2

本题主要考查Promise对象的catch方法。

catch方法用来捕捉前面抛出的错误,对错误进行处理,catch之后可以继续使用链式操作。当错误已经别捕捉到了,就不会再执行后续的catch方法了。

本题代码中第一个catch方法捕获到了错误之后,可以继续链式调用,返回的结果1作为传入下一个then方法的参数, 执行x+1后,将结果2返回作为传递给下一个then方法的参数,所以输出结果是2。

虽然第一个catch方法内部没有对错误进行处理,但已经捕获过错误了,那么后续的catch方法不会再执行了,最后一个catch方法不会输出任何信息。

所以代码最终输出结果为2,本题答案为D.

# 7.下图所示代码中,函数fn内部返回了一个Promise实例对象,如果要实现下图中的输出结果,并且是每隔一秒输出一次数值1,选项中代码书写正确的是?(选择一项)

DIzw6O.png (opens new window)

A.DIz6AA.png (opens new window)

B.DIzght.png (opens new window)

C.DoSSHJ.png (opens new window)

D.DoStbQ.png (opens new window)

本题主要考查对Promise对象的理解与应用。

AC选项代码中,由于then方法中回调函数的内部没有设置return值,导致下一个then方法中的data数据undefined,不符合要求输出数值1的要求。

B选项代码中直接返回return data,默认会将数字1转换为成功状态的promise对象,直接就调用下一个then方法,输出数值1,不符合每隔一秒的要求。

D选项的代码中返回的是fn()执行之后的promise对象,这个promise对象内部使用了定时器一秒之后才会执行resolve(1)代码,从而实现每隔一秒输出一次数值1。

所以本题答案为D.

# 8.下列所示代码,运行结果是?(选择一项)

DoSRa9.png (opens new window)

**A.**17

**B.**18

**C.**19

**D.**20

本题主要考查class的属性。

1、在class中直接声明的属性,以及constructor构造函数中声明的属性都是挂载到实例对象上的,但是counstructor中会覆盖class中直接声明的同名属性值。

2、使用static关键字声明的属性是挂载到class类上的,实例对象无法访问。

本题代码中Person的实例化对象p1时设置实例属性age值为20 ,之后调用say方法,输出的值20,所以本题答案为D.

# 9.下列代码中,书写格式正确的选项是?(选择两项)

A.DoSHqe.png (opens new window)

B.DoppM8.png (opens new window)

C.Dop9sS.png (opens new window)

D.DopiZQ.png (opens new window)

本题主要考查Module的导入和导出。

1、export default表示单个导出,在导出时,不需要添加{},对应的使用import导入是,也不需要添加{},直接书写变量名即可。

2、export 表示多个导出。在导出时,需要添加{}, 对应的使用import导入时,也需要添加{}。

单个导出,可以直接导出一个值,A选项正确。

多个导出时,必须添加{},代码中的export m没有添加{},B选项错误。

export default属于单个导出,一个模块中只能使用一次,代码中同时使用了两次expaort default语句,C选项错误。

*表示整体导入,也就是将所有的都导入,可以整体设置别名, D选项正确。

所以本题答案为AD.

# 10.下图代码运行结果是?(选择一项)

DopKLF.png (opens new window)

**A.**0

**B.**1

**C.**3

**D.**报错

本题主要考查扩展运算符。

本题代码中,从里到外进行展开,[...'...']使用扩展运算符将字符串展开为数组元素,结果为['.','.','.'], 那么[…[...'...']]相等于[…['.','.','.']],将数组展开到另一个数组中,最终的结果为['.','.','.'],所以数组的长度为3,本题答案为C。

# 11.下图所示代码,运行后输出结果是?(选择一项)

DoprFA.png (opens new window)

**A.**0

**B.**1

**C.**3

**D.**报错

本题主要考查箭头函数的this指向。

箭头函数没有自己的this,会沿着当前作用域向上查找this,而普通函数的this指向函数的调用对象。

本题代码中将调用foo函数的返回结果(即:obj对象)赋值给result,,result.fn()就相当于obj.fn(),那么普通函数fn内部的this指向了obj,所以setTimeout内的箭头函数中访问this.a,会沿着作用域链向上查找到fn函数内部的this.a(也就是obj.a),值为2。所以本题答案为B.

# 12.使用webpack对项目进行打包,下列说法正确的是?(选择两项)

**A.**webpack可以自定义同时配置多入口和多出口文件

**B.**html、css以及js中的图片可以使用file-loader处理

**C.**在js中使用require方式引入的css文件可以使用css-loader转换

**D.**html-webpack-plugin插件只能创建一个html入口文件

本题主要考查webpack。

webpack可以配置单入口和单出口文件,也可以配置多入口和多出口文件。A选项正确。

file-loader只能处理css和js文件中图片,不可以处理html中的图片,B选项错误。

css-loader支持js中使用require方式引入css文件。C选项正确。

html-webpack-plugin插件可以创建html入口文件,并不是只能创建一个html入口文件,例如:单页面可以生成一个html文件入口,配置N个html-webpack-plugin可以生成N个页面入口。 D选项错误。

所以本题答案为AC.

# 13.根据如下代码,下列说法错误的是?(选择两项)

Do9ghR.png (opens new window)

**A.**第一次输出a的值为2,第二次输出a的值也为2

**B.**第一次输出a的值为2,第二次输出a的值为1

**C.**第一次输出b的值为2,第二次输出b的值也为2

**D.**第一次输出b的值为1,第二次输出b的值为2

本题主要考查let关键字和块级作用域。

let变量只在{}作用域内有效,var声明的变量不受{}作用域的影响。本题代码按着从上到下的执行顺序,输出结果如下:

第一次输出a的值为2,第二次输出a的值为1,A选项说法错误,B选项说法正确。

第一次输出b的值为2,第二次输出b的值也为2, C选项说法正确,D选项说法错误。

所以本题答案为AD.

# 14.下列关于常量与变量说法错误的是?(选择两项)

**A.**变量是可以改变的

**B.**常量声明必须赋值

**C.**变量声明必须赋值

**D.**常量可以重复声明

本题主要考查常量和变量的概念。

变量是可以改变的,A选项说法正确。

常量声明必须赋值,但是不能重复声明,B选项说法正确,C选项说法错误。

变量声明时可以赋值,也可以不赋值,D选项说法错误。

所以本题答案为CD.

# 15.观察如下代码,最后输出的结果是?(选择一项)

Do9jjf.png (opens new window)

A. [2 2]

B.[y 2]

**C.**报错

D.[x y]

本题主要考查函数参数的默认值。

因为参数x默认值等于另一个参数y,而此时y还没有声明,属于"死区",因此会报错。所以本题答案为C.

# 16.如下图,是需要匹配的数组,下列哪个选项不能匹配到'f'?(选择一项)

DoiQ6x.png (opens new window)

A.

let [ , , [ , , [ , f ,]]]=arr;
1

B.

let [,,[,f]] = [ 'c', 'd', [ 'e', 'f','g']];
1

C.

let [, , [, , [, f]]] = arr;
1

D.

let [ , ,[ , f ,]]= arr;
1

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

数组解构赋值,两边的规则需要是一样的,let [ , ,[ , f ,]]= arr; 匹配到的是d,所以本题答案为D

# 17.根据如下代码,哪项可以匹配到“前端进阶:响应式开发与常用框架”与“H5&JS进阶与组件化网页开发?(选择一项)

Dok9s0.png (opens new window)

A.

 const { Course:[ , [{CourseName}] , {CourseName :Name}]}= player;
1

B.

const{ Course:[[{CourseName}],{CourseName:Name}]} = player;
1

C.

const { Course:[ , [{CourseName}],{courseName}]} = player;
1

D.

const { , , [, [{CourseName}],{CourseName:Name}]} = player;
1

本题主要考察对象与数组解构赋值的综合应用。

对象的解构赋值中,变量名与属性名必须一致,数组要注意顺序,另外,还要与原数组结构一致

所以本题答案为A.

# 18.观察代码,下列输出结果正确的是?(选择一项)

DokBTS.png (opens new window)

A. { b: 'hello', d: 'e' }

B.{ a: { b: 'c', d: 'e' } }

C.{ a: { b: 'hello', d: 'e' } }

D.{ a: { b: 'hello' } }

本题主要对象的新增方法Object.assign方法

本题代码中,target对象的a属性被source对象的a属性整个替换掉了,所以是{ a: { b: 'hello' } };本题答案为D.

# 19.学习了类表达式,使用类的表达式的方式书写如下代码,哪一项不能正确输出“云牧最帅”?(选择两项)

A.

let person = class {
    constructor() {
        console.log("云牧最帅");
    }
};
new p();
1
2
3
4
5
6

B.

let person = class {
    constructor() {
        p.imo = "云牧最帅";
        console.log(p.imo);
    }
};
new person();
1
2
3
4
5
6
7

C.

let person = class {
    constructor() {
        console.log("云牧最帅");
    }
};
new person();
1
2
3
4
5
6

D.

let person = new (class {
    constructor() {
        console.log("云牧最帅 ");
    }
})();
1
2
3
4
5

本题主要考查class的语法格式。

A选项代码中,这个类的名字是person而不是p,p这个名字是无效的,所以通过 new p() 会报错。

B选项代码中,p并没有定义却使用了,所以执行p.imo时会报错“ p is not defined”

C选项代码中,声明了class,之后实例化,可以正常输出‘云牧最帅’

D选项代码中,相当于在声明class后,直接就实例化了,可以正常输出‘云牧最帅’

所以本题答案为AB.

# 20.观察下如下代码,描述正确的选项是?(选择两项)

DoESbV.png (opens new window)

A.

 console.log(col.x);  ===> 输出js
1

B.

col.eat(); ===> 输出前端
1

C.

 console.log(col.x);  ===> 输出ES6
1

D.

col.eat(); ===> 报错
1

本题主要考查class的继承。

属性的值与代码执行顺序有关,后定义的自己的属性,会覆盖住先继承的父类的。本题代码中,col.x输出的值应该是"ES6",A选项错错误,C选项正确。

子类可以继承父类的属性与方法,所以可以调用父类的实例方法,本题代码中col.eat()可以正常调用,弹出“前端”,B选项正确,D选项错误。

所以本题答案为BC.