ES6 系列 40 道基础题
1.下面不属于 ECMAScript 规范的范围的是:( )
- A、数据类型
- B、语法
- C、DOM事件
- D、内置对象和函数的标准库
答案
答案:C
解析:DOM 事件不属于 ECMAScript 的部分;ECMAScript 定义的内容:语法、类型、原型和继承、内置对象和函数的标准库。
考点: ECMAScript 定义规范的理解,来自《第一节:什么是 ES6?新手该如何理解》的内容。
2.下面不属于关键字let的特点的是:( )
- A、只在 let 命令所在的代码块内有效
- B、会产生变量提升现象
- C、同一个作用域,不能重复声明同一个变量
- D、不能在函数内部重新声明参数
答案
答案:B
解析:使用 var 关键字才会产生变量提升的现象。关键字let不会产生变量提升现象,所以必须先声明定义后使用,否则程序抛出异常。
考点:关键字 let 的使用注意事项,来自《第二节:ES6 新增了 let 关键字,干嘛用的?》的内容。
3.关于关键字 const,下列说法错误的是:()
- A、用于声明常量,声明后不可修改
- B、不会发生变量提升现象
- C、不能重复声明同一个变量
- D、可以先声明,不赋值。
答案
答案:D
解析:声明后必须赋值,否则程序会抛出异常。
考点:关键字const的使用注意事项,来自 《第三节:ES6 中另一个不得不说的关键字 const》的内容。
4.在数组的解构赋值中,var [ a,b,c ] = [ 1,2 ]结果中,a、b、c的值分别是:()
- A、1 2 null
- B、1 2 undefined
- C、1 2 2
- D、抛出异常
答案
答案:B
解析:在解构赋值过程中,赋值不成功,变量的值会变成undefined,不会抛出异常。
考点:数组的结构赋值使用注意事项。来自 《第五节:一个令人兴奋的ES6新特性:解构赋值》的内容。
5.在对象的解构赋值中,var {a,b,c} = { “c”:10, ”b”:9, ”a”:8 } 结果中,a、b、c 的值分别是:()
- A、10 9 8
- B、8 9 10
- C、undefined 9 undefined
- D、null 9 null
答案
答案:B
解析:对象的解构赋值不会受到属性的排列次序影响。
考点:对象解构赋值和数组解构赋值的区别。来自 《第五节:一个令人兴奋的ES6新特性:解构赋值》的内容。
6.关于模板字符串,下列说法不正确的是:()
- A、使用反引号标识
- B、插入变量的时候使用 ${}
- C、所有的空格和缩进都会被保留在输出中
- D、${}中的表达式不能是函数的调用
答案
答案:D
解析:${} 中可以放任意的 JavaScript 表达式,包括运算表达式、对象属性、函数调用等。
考点:模板字符串的特点。来自《第六节:ES6 为字符串 String 带来哪些好玩的特性?》的内容。
7.关于字符串扩展的新函数,下面描述错误的是:()
- A、includes 函数用于判断字符串中是否含有指定的子字符串
- B、repeat 函数将目标字符串重复N次,目标字符串被修改
- C、startsWidth 函数判断指定的子字符串是否出现在目标字符串头部位置
- D、endWidth 函数判断指定的子字符串是否出现在目标字符串尾部位置
答案
答案:B
解析:repeat 函数将目标字符串重复 N 次,会返回一个新的字符串,不影响目标字符串。
考点:String 字符串的新特性 repeat 函数的使用。来自《第六节:ES6为字符串String带来哪些好玩的特性?》的内容。
8.关于数值的扩展,window.isNaN(“abc”) 和 Number.isNaN(“abc”) 的结果分别是:()
- A、true false
- B、false true
- C、true true
- D、false false
答案
答案:A
解析:window.isNaN 函数会把非数值的参数转化成数值再进行判断,而 Number. isNaN 只对数值类型有效,非数值类型的参数一律返回 false。
考点:isNaN 函数从全局函数移植到 Number 对象后的区别。来自《第七节:ES6为数值做了哪些扩展?》的内容。
9.关于数值扩展的 Number.isInteger 函数,下面说法错误的是:()
- A、用来判断是否是整数,返回布尔值。
- B、Number.isInteger(3); 结果为:true
- C、Number.isInteger(3.0); 结果为:false
- D、Number.isInteger(3.01); 结果为:false
答案
答案:C
解析:在 JavaScript 内部对整数和浮点数采用一样的存储方式,因此小数点后如果都是0的浮点数,都会被认为是整数。
考点:Number.isInteger 函数使用的注意事项。来自《第七节:ES6为数值做了哪些扩展?》的内容。
10.数组扩展的 fill() 函数,[1,2,3].fill(4) 的结果是:()
- A、[4]
- B、[1,2,3,4]
- C、[4,1,2,3]
- D、[4,4,4]
答案
答案:D
解析:fill 函数的参数会把原数组的每个元素填充成指定的参数。
考点:对 fill() 函数的了解和使用。来自《第八节:ES6为数组做了哪些扩展?》的内容。
11.数组的扩展中,不属于用于数组遍历的函数的是:()
- A、keys( )
- B、entries( )
- C、values( )
- D、find( )
答案
答案:D
解析:find 函数用于找出数组中符合条件的第一个元素,并不是用于遍历数组。
考点:利用数组的新特性来实现数组的遍历。来自《第八节:ES6为数组做了哪些扩展?》的内容。
12.关于对象的扩展,错误的是:()
- A、ES6中对象的表示法更加简洁
- B、对象的属性名可以是表达式
- C、对象的方法名不可以是表达式
- D、当属性名为表达式的时候,需要使用[ ]标识
答案
答案:C
解析:对象的方法名同样可以是表达式,使用 [] 标识。
考点:对象的新特性的使用注意事项。来自《第九节:ES6为对象做了哪些扩展?》的内容。
13.关于对象的 Object.is 函数,错误的是:()
- A、用于判断两个值是否严格相等
- B、用于判断两个值是否抽象相等
- C、Object.is(3,'3') 结果是:false
- D、Object.is(3,3.0) 结果是:true
答案
答案:B
解析:Object.is 函数判断两个值是否严格相等,或者说全等,作用等同于全等符号:===
考点:Object.is 函数的了解和使用注意事项。来自《第九节:ES6为对象做了哪些扩展?》的内容。
14.函数的扩展中,关于 rest 参数的描述,正确的是:()
- A、获取函数剩下部分的参数
- B、rest 参数不可以是函数的最后一个参数
- C、获取函数的第一个参数
- D、一个名叫 rest 的参数
答案
答案:A
解析:rest 参数用于表示且必须是函数的最后一个函数,后面不可以再跟其他参数,故B选项是错的。它的表示法表示法使用...(三个点)+ 自定义的参数名,故D选项是错的
考点:rest 参数的理解和使用。来自《第十节:ES6为函数做了哪些扩展?》的内容。
15.关于箭头函数的描述,错误的是:()
- A、使用箭头符号=>定义
- B、参数超过1个的话,需要用小括号()括起来
- C、函数体语句超过1条的时候,需要用大括号{ }括起来,用return语句返回
- D、函数体内的 this 对象,绑定使用时所在的对象
答案
答案:D
解析:函数体内的 this 对象,绑定定义时所在的对象,而不是使用时所在的对象。这点很重要,连载第十节的时候还特意加了一节讲这个内容。
考点:箭头函数的使用注意事项。来自《第十节(补课):函数的扩展 — 箭头函数的 this 使用》的内容。
16.关于 Symbol,错误的说法是:()
- A、是 ES6 新增的一种数据类型
- B、Symbol() === Symbol() 结果为 false
- C、Symbol('same') === Symbol('same') 结果为 true
- D、当 symbol 值作为对象的属性名的时候,不能用点运算符获取对应的值。
答案
答案:C
解析:symbol 是独一无二的值,虽然它们的描述都是 'same',但是对应的值还是不一样的,所以结果为:false。
解析:关于 Symbol 的使用注意事项,来自《第十一节:JavaScript有了一种全新的数据类型:Symbol》的内容。
17.下面运算结果,结果为true的是:()
- A、Symbol.for('name') == Symbol.for('name')
- B、Symbol('name') == Symbol.for('name')
- C、Symbol('name') == Symbol('name')
- D、Symbol.for('name') == Symbol('name')
答案
答案:A
解析:Symbol.for 函数会根据参数名,去全局环境中搜索是否有以该参数为名的 symbol 值,有就返回它,没有就以该参数名来创建一个新的 symbol 值,并登记在全局环境中,而Symbol 每次都会创建一个独一无二的值,不会登记在全局环境中。
解析:Symbol 和 Symbol.for 创建变量的区别,来自《第十一节:JavaScript 有了一种全新的数据类型:Symbol》的内容。
18.关于 Proxy 代理,下面说法错误的是:()
- A、可以理解成在目标对象之前,架设一层“拦截”
- B、Proxy 的 get 方法用于拦截某个属性的读取操作。
- C、Proxy 的 set 方法用于拦截对对象的写操作。
- D、一旦对象设置 Proxy 代理后不可取消,所以要谨慎操作
答案
答案:D
解析:可以用 Proxy.revocable() 来取消代理,并不是不可以取消的。
考点:Proxy 代理的设置和取消代理,来自《第十二节:ES6 Proxy代理 和 去银行存款有什么关系?》的内容。
19.关于 for...of 的简述,说法错误的是:()
- A、它可以遍历所有具有 iterator 接口的数据结构
- B、不可以用 break 来终止循环
- C、使用 continue 可以跳过当前循环
- D、可以遍历 DOM list 对象
答案
答案:B
解析:for...of 可以用 break 来终止循环,而传统的 forEach 则不可以用 break 终止循环,这正是 for...of 相对 forEach 的优势
考点:for...of 遍历相对于传统便利方式的优势,来自《第十三节:易学又实用的新特性:for...of》的内容。
20.关于 set 结构,下面说法错误的是:()
- A、创建一个实例需要用new关键字
- B、结构成员都是唯一的,不允许重复
- C、使用 add 方法添加已经存在的成员会报错
- D、初始化的时候接受数组作为参数
答案
答案:C
解析:使用 add 方法添加已经存在的成员,会自动忽略相同的值,相同的值保留一个。
考点:set 结构的特点,来自《第十六节:ES6 新增的 Set 和 WeakSet 是什么东西?》的内容。
21.关于 Set 结构的实例方法,下面说法错误的是:()
- A、set 方法用于添加成员
- B、clear 方法用于清除所有成员。
- C、entries 方法返回成员的位置索引和值的遍历器
- D、values 方法返回成员值的便利器
答案
答案:C
解析:返回的是键名和键值的遍历器;特别注意的是:set 结构的键名和键值是同一个值。
考点:set 结构键名和键值的特点,来自《第十六节:ES6 新增的 Set 和 WeakSet 是什么东西?》的内容。
22.关于 WeakSet 结构,说法错误的是:()
- A、与 Set 结构一样,成员值都是唯一
- B、成员值必须是对象
- C、WeakSet 中的对象都是弱引用
- D、可以 forEach() 方法实现遍历
答案
答案:D
解析:WeakSet 结构是不可遍历的,所以它不存在 forEach 方法,以及 keys()、values()、entries() 方法,这是它和 Set 结构不同处之一。
考点:Set 和 WeakSet 的不同点,来自《第十六节:ES6新增的 Set 和 WeakSet 是什么东西?》的内容。
23.关于 Map 结构的介绍,下面说法错误的是:()
- A、是键值对的集合
- B、创建实例需要使用 new 关键字
- C、Map 结构的键名必须是引用类型
- D、Map 结构是可遍历的
答案
答案:C
解析:键名可以是任何数据类型,这是 Map 结构的最大特性,也是 Map 结构和传统对象 Object 最大的区别。
考点:Map 结构的键名特点,来自《第十七节:ES6 新增的 Map 和 WeakMap 又是什么东西?》的内容。
24.下列 Map 结构的键名数据类型,描述错误的是:()
- A、键名可以是数组类型的值
- B、键名可以是 Symbol 类型的值
- C、键名值可以是 null
- D、键名值不可以为 undefined
答案
答案:D
解析:undefined 也可以做为 Map 结构的键名。
考点:Map 结构键名的值类型,来自《第十七节:ES6新增的Map和WeakMap 又是什么东西?》的内容。
25.关于 WeakMap 结构,下列说法错误的是:()
- A、创建实例需要使用 new 关键字
- B、键名可以是任何类型的值
- C、WeakMap 结构不支持 clear 方法
- D、WeakMap 结构不可遍历
答案
答案:B
解析:WeakMap 结构的键名必须是引用类型的值,也是它和 Map 最大不同之处。
考点:Map 和 WeakMap 的不同点,来自《第十七节:ES6新增的Map和WeakMap 又是什么东西?》的内容。
26.ES6 的新特性 Promise 对象的设计初衷是()
- A、更好地实现遍历具有 iterator 接口的数据结构
- B、为对象的操作增加了一层拦截
- C、独一无二的值,用于对象属性,避免属性名冲突
- D、让开发者更合理、更规范地用于处理异步操作
答案
答案:D
解析:遍历具有 iterator 接口的数据结构是 for...of 的作用;为对象的操作增加了一层拦截是 Proxy 代理的设计初衷;独一无二的值,避免属性名冲突是 Symbol 的设计初衷。而 D 选项,是 Promise 对象的设计初衷。
考点:Promise 对象的作用,来自《第十八节:教你如何使用 ES6 的 Promise 对象》的内容。
27.关于 Promise 对象的状态,下列说法错误的是:()
- A、三种状态分别是:pending 初始状态、fulfilled 成功、rejected 失败
- B、pending 初始状态可以状变成 fulfilled 成功
- C、rejected 失败不可以状变成 pending 初始状态
- D、rejected 失败可以状变成 fulfilled 成功
答案
答案:D
解析:A、B、C 的说法都是正确的,rejected 失败和fulfilled成功之间不能相互转换,故D选项是错误的。
考点:Promise 对象三种状态的转换关系,来自《第十八节:教你如何使用 ES6 的 Promise 对象》的内容。
28.下面关于类 class 的描述,错误的是:()
- A、JavaScript 的类 class 本质上是基于原型 prototype 的实现方式做了进一步的封装
- B、constructor 构造方法是必须的
- C、如果类的 constructor 构造方法有多个,后者会覆盖前者
- D、类的静态方法可以通过类名调用,不需要实例化
答案
答案:C
解析:同一个类的 constructor 构造方法只能有一个,否则程序会报错。
考点:类 class 的声明,来自《第十九节:终于,JavaScript 也有了类(class)的概念》的内容。
29.JavaScript 中类的继承使用的关键字是:()
- A、extends
- B、inherit
- C、extend
- D、base
答案
答案:A
解析:extends 才是 JavaScript 中类的继承关键字,其他的选项都不是。
考点:类的继承知识,来自《第十九节:终于,JavaScript 也有了类(class)的概念》的内容。
30.在类的继承中,关于 super 的说法错误的是:()
- A、在子类的构造函数,必须先调用 super()
- B、super 相当于子类的引用
- C、先调用 super(),才可以使用 this
- D、super() 相当于父类构造函数的调用
答案
答案:B
解析:super 是父类的引用,我们可以通过 super 来调用父类的方法和属性。
考点:类的继承,来自《第十九节:终于,JavaScript 也有了类(class)的概念》的内容。
31.下列数据结构中,不能被 for...of 遍历的是:()
- A、Array 数组
- B、Object 对象
- C、String 字符串
- D、Set 结构
答案
答案:B
解析:只有该数据结构实现了 Iterator 遍历器接口才可以被 for...of 遍历,而数组,字符串,Set 和 Map 结构正式这样的可遍历对象。而普通的 Object 对象并没有实现Iterator遍历器接口。
考点:具有 Iterator 接口可遍历对象,来自《第十四节:ES6 的 Iterator 遍历器到底是什么?》的内容。
32.关于 Iterator 遍历器的说法,错误的是:()
- A、next() 方法是 Iterator 遍历器的核心
- B、当 next() 返回对象的 done 属性为 fasle,遍历结束
- C、具有 Iterator 接口的对象视为可遍历对象
- D、可以自定义一个可遍历对象和其遍历行为
答案
答案:B
解析:当 next() 返回对象的 done 属性为 fasle,表示遍历未结束,done 属性为 true 时,表示遍历结束。
考点:Iterator 遍历器的原理,来自《第十四节:ES6的 Iterator 遍历器到底是什么?》的内容。
33.关于新特性 Generator 函数的描述,错误的是:()
- A、Generator 函数,又称生成器函数
- B、声明 Generator 函数的关键字是:function*
- C、Generator 函数执行后得到的一个生成器
- D、使用 return 语句使 Generator 函数暂停执行,直到 next 方法的调用
答案
答案:D
解析:使函数暂停执行的关键字是 yield,不是 return;return 语句是使函数停止执行并退出。
考点:Generator函数的特点,来自《第十五节:有一种特殊的函数叫:Generator 函数》的内容。
34.Generator 函数的 yield 关键字的作用是:()
- A、停止执行
- B、退出函数
- C、暂停执行,等待 next() 方法调用
- D、停止执行,可自行恢复执行
答案
答案:C
解析:Generator 函数可以有很多个yield。而 return 代表的是终止执行,yield 代表的是暂停执行,后续通过调用生成器的 next() 方法,可以恢复执行。
考点:yield 关键字的关键字,来自《第十五节:有一种特殊的函数叫:Generator 函数》的内容。
35.在 Generator 函数中,yield* 语句的作用是:()
- A、调用另外的 Generator 函数
- B、暂停执行,待 next() 方法调用后恢复
- C、停止执行,退出函数
- D、调用任意的其他函数
答案
答案:A
解析:关键字 yield* 来实现调用另外的 Generator 函数。如果一个 Generator 函数A执行过程中,进入(调用)了另一个 Generator 函数 B,那么会一直等到 Generator 函数B全部执行完毕后,才会返回 Generator 函数A继续执行。
考点:关键字 yield* 的作用,来自《第十五节:有一种特殊的函数叫:Generator 函数》的内容。
36.关于 ES6 的 module 模块,下列说法错误的是:()
- A、可以有效解决大型系统文件复杂的依赖问题
- B、使用 export 语句可以选择性地向外部暴露自己的属性或者方法
- C、使用 import 语句导入其他模块的属性或者方法
- D、目前大部分主流浏览器都支持 module 模块
答案
答案:D
解析:目前(2016年上半年)还没有浏览器支持 module 模块的开发,需要借助转码工具才可以使用。A 选项是 ES6 的设计初衷之一,B 选项是 export 语句的正确描述,C选项是 import 语句的正确描述。
考点:module 模块的使用和实现,来自《一个缺失已久的特性 — module 模块》的内容。
37.module 模块中,对下列语句的描述,错误的是:()
- A、export 导出
- B、import 导入
- C、export default 默认导出
- D、import * as 重命名
答案
答案:D
解析:import * as:星号符*实现的是整体导入。而重命名的实现方式是:import { name as myname }。
考点:module 模块的关键字语句含义,来自《一个缺失已久的特性 — module 模块》的内容。
38.module 模块中的注意事项,下列说法错误的:()
- A、除了对象类型以外,导出的属性对外都是只读的
- B、导入不存在的变量,值为 undefined
- C、导入不存在的变量,程序会抛出异常
- D、可以为导入的属性和方法取任意名字
答案
答案:C
解析:导入不存在的变量,程序不会抛出异常,只是值为 undefined。
考点:module模块的注意事项,来自《一个缺失已久的特性 — module 模块》的内容。
39.想要获取 Map 实例对象的成员数,利用的属性是:()
- A、size
- B、length
- C、sum
- D、members
答案
答案:A
解析:属性就是 size:获取实例的成员数,其他选项都不是,很多初学者误以为是 length。
考点:Map 结构的知识点,来自《第十七节:ES6 新增的 Map 和 WeakMap 又是什么东西?》的内容。
40.关于定义常量的关键字 const,定义一个 Object 对象 {“name”:”Jack”},再对属性 name 的值进行修改,如:obj.name = “John”。下列说法正确的:()
- A、修改常量,程序跑出异常
- B、程序不抛出异常,修改无效
- C、修改成功,name 的值为 John
- D、程序不抛出异常,name 的值为 undefined
答案
答案:C
解析:用 const 来声明一个对象类型的常量,就是传址赋值。而不可修改的是对象在内存中的地址,而不是对象本身。所以修改 name 并不是修改对象的内存地址,所以可以成功修改。
考点:const 定义一个对象时候的注意事项,还记得装修师傅的故事吗?来自《第三节:ES6 中另一个不得不说的关键字 const》的内容。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论