ES6—面试常见ES6问题集锦(14)
栏目: JavaScript · 发布时间: 5年前
内容简介:通过对ES6系列文章的学习,相信大家对ES6已结有一定程度的了解。所以本节的目的在于通过测试,便于让大家了解在学习中的知识掌握情况,查缺补漏,一步一个脚印。1、选择题
通过对ES6系列文章的学习,相信大家对ES6已结有一定程度的了解。
所以本节的目的在于通过测试,便于让大家了解在学习中的知识掌握情况,查缺补漏,一步一个脚印。
1、选择题
1.1 下面不属于关键字let的特点的是:( )
A、只在 let 命令所在的代码块内有效
B、会产生变量提升现象
C、同一个作用域,不能重复声明同一个变量
D、不能在函数内部重新声明参数
答案:B
解析:使用var关键字才会产生变量提升的现象。关键字let不会产生变量提升现象,所以必须先声明定义后使用,否则程序抛出异常。
1.2 关于定义常量的关键字const,定义一个Object对象{“name”:”Jack”},再对属性name 的值进行修改,如:obj.name = “John”。下列说法正确的:()
A、修改常量,程序跑出异常
B、程序不抛出异常,修改无效
C、修改成功,name的值为John
D、程序不抛出异常,name的值为undefined
答案:C
解析:用const来声明一个对象类型的常量,就是传址赋值。而不可修改的是对象在内存中的地址,而不是对象本身。所以修改name并不是修改对象的内存地址,所以可以成功修改。
1.3 在对象的解构赋值中,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
解析:对象的解构赋值不会受到属性的排列次序影响。
1.4 关于模板字符串,下列说法不正确的是:()
A、使用反引号标识
B、插入变量的时候使用${ }
C、所有的空格和缩进都会被保留在输出中
D、${ }中的表达式不能是函数的调用
答案:D
解析:${ }中可以放任意的JavaScript表达式,包括运算表达式、对象属性、函数调用等。
1.5 关于字符串扩展的新函数,下面描述错误的是:()
A、includes函数用于判断字符串中是否含有指定的子字符串
B、repeat函数将目标字符串重复N次,目标字符串被修改
C、startsWidth函数判断指定的子字符串是否出现在目标字符串头部位置
D、endWidth函数判断指定的子字符串是否出现在目标字符串尾部位置
答案:B
解析:repeat函数将目标字符串重复N次,会返回一个新的字符串,不影响目标字符串。
1.6 数组扩展的fill( )函数,[1,2,3].fill(4)的结果是:()
A、[4]
B、[1,2,3,4]
C、[4,1,2,3]
D、[4,4,4]
答案:D
解析:fill函数的参数会把原数组的每个元素填充成指定的参数。
1.7 数组的扩展中,不属于用于数组遍历的函数的是:()
A、keys( )
B、entries( )
C、values( )
D、find( )
答案:D
解析:find函数用于找出数组中符合条件的第一个元素,并不是用于遍历数组。
1.8 关于Proxy代理,下面说法错误的是:()
A、可以理解成在目标对象之前,架设一层“拦截”
B、Proxy的get 方法用于拦截某个属性的读取操作。
C、Proxy的set方法用于拦截对对象的写操作。
D、一旦对象设置Proxy代理后不可取消,所以要谨慎操作
答案:D
解析:可以用Proxy.revocable( )来取消代理,并不是不可以取消的。
1.9 关于Set结构的实例方法,下面说法错误的是:()
A、set方法用于添加成员
B、clear方法用于清除所有成员。
C、entries方法返回成员的位置索引和值的遍历器
D、values方法返回成员值的便利器
答案:C
解析:返回的是键名和键值的遍历器;特别注意的是:set结构的键名和键值是同一个值。
1.10 下面关于类class的描述,错误的是:()
A、 JavaScript的类class本质上是基于原型prototype的实现方式做了进一步的封装
B、 constructor构造方法是必须的
C、 如果类的constructor构造方法有多个,后者会覆盖前者
D、 类的静态方法可以通过类名调用,不需要实例化
答案:C
解析:同一个类的constructor构造方法只能有一个,否则程序会报错。
1.11 关于Promise对象的状态,下列说法错误的是:()
A、 三种状态分别是:pending初始状态、fulfilled成功、rejected失败
B、 pending初始状态可以状变成fulfilled成功
C、 rejected失败不可以状变成pending初始状态
D、 rejected失败可以状变成fulfilled成功
答案:D
解析:A、B、C的说法都是正确的,rejected失败和fulfilled成功之间不能相互转换,故D选项是错误的。
1.12 关于新特性Generator函数的描述,错误的是:()
A、Generator函数,又称生成器函数
B、声明Generator函数的关键字是:function*
C、Generator函数执行后得到的一个生成器
D、使用return语句使Generator函数暂停执行,直到next方法的调用
答案:D
解析:使函数暂停执行的关键字是yield,不是return;return语句是使函数停止执行并退出。
1.13 Generator函数的yield关键字的作用是:()
A、停止执行
B、退出函数
C、暂停执行,等待next( )方法调用
D、停止执行,可自行恢复执行
答案:C
解析:Generator函数可以有很多个yield。而return代表的是终止执行,yield代表的是暂停执行,后续通过调用生成器的next( )方法,可以恢复执行。
1.14 module模块中,对下列语句的描述,错误的是:()
A、export 导出
B、import 导入
C、export default 默认导出
D、import * as 重命名
答案:D
解析:import as:星号符 实现的是整体导入。而重命名的实现方式是:import { name as myname }。
1.15 在类的继承中,关于super的说法错误的是:()
A、 在子类的构造函数,必须先调用super( )
B、 super相当于子类的引用
C、 先调用super( ),才可以使用this
D、 super( )相当于父类构造函数的调用
答案:B
解析:super是父类的引用,我们可以通过super来调用父类的方法和属性。
2、简答题
2.1 说出至少5个ES6的新特性,并简述它们的作用。(简答题)
答:
1、let关键字,用于声明只在块级作用域起作用的变量。 2、const关键字,用于声明一个常量。 3、解构赋值,一种新的变量赋值方式。常用于交换变量值,提取函数返回值,设置默认值。 4、Symbol数据类型,定义一个独一无二的值。 5、Proxy代理,用于编写处理函数,来拦截目标对象的操作。 6、for...of遍历,可遍历具有iterator 接口的数据结构。 7、Set结构,存储不重复的成员值的集合。 8、Map结构,键名可以是任何类型的键值对集合。 9、Promise对象,更合理、规范地处理异步操作。 10、Class类定义类和更简便地实现类的继承。
3、编程题
3.1 使用解构赋值,实现两个变量的值的交换
答:
let a = 1; let b = 2; [a,b] = [b,a];
3.2 使用模板字符串改写下面的代码。(ES5 to ES6改写题)
let iam = "我是"; let name = "大彬哥"; let str = "大家好,"+iam+name+",我想死你们啦。";
改成模板字符串:
let iam = `我是`; let name = `大彬哥`; let str = `大家好,${iam+name},我想死你们啦。`;
3.3 promise对象的用法,手写一个promise
promise是一个构造函数,下面是一个简单实例
var promise = new Promise((resolve,reject) => { if (操作成功) { resolve(value) } else { reject(error) } }) promise.then(function (value) { // success },function (value) { // failure })
3.4 阅读下面的代码,并用for...of改成它。(ES5 to ES6改写题)
let arr = ['a','b','c','d','e']; let sum = 'z'; for(let i=0;i<arr.length;i++){ sum += arr[i]; }
改:
let arr = ['a','b','c','d','e']; let sum = 'z'; for(value of arr){ sum += value; }
4、运行分析题
4.1 分析下列程序代码,得出运行结果,解释其原因
const promise = new Promise((resolve, reject) => { resolve('success1') reject('error') resolve('success2') }) promise .then((res) => { console.log('then: ', res) }) .catch((err) => { console.log('catch: ', err) }) 运行结果: then:success1 原因: 构造函数中的 resolve 或 reject 只有第一次执行有效,多次调用没有任何作用
4.2 以下代码依次输出的内容是?
setTimeout(function () { console.log(1) }, 0); new Promise(function executor(resolve) { console.log(2); for (var i = 0; i < 10000; i++) { i == 9999 && resolve(); } console.log(3); }).then(function () { console.log(4); }); console.log(5);
解析:
首先先碰到一个 setTimeout,于是会先设置一个定时,在定时结束后将传递这个函数放到任务队列里面,因此开始肯定不会输出 1 。 然后是一个 Promise,里面的函数是直接执行的,因此应该直接输出 2 3 。 然后,Promise 的 then 应当会放到当前 tick 的最后,但是还是在当前 tick 中。 因此,应当先输出 5,然后再输出 4 , 最后在到下一个 tick,就是 1 。 2 3 5 4 1
5、总结
相信通过本次测试,大家又加深了对ES6的理解。
对没有完全掌握的部分,接下来可以进行有针对性的训练,那么你将在距离成为大神的道路上,又更近一步啦。
以上所述就是小编给大家介绍的《ES6—面试常见ES6问题集锦(14)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 高可用 Prometheus:问题集锦
- 高可用 Prometheus:问题集锦
- Spark一些问题集锦【持续更新】
- 数据科学和机器学习面试问题集锦
- 总结—Harbor仓库部署和使用问题集锦
- 构建Potatso问题集锦及解决方案
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。