资讯专栏INFORMATION COLUMN

ES6—面试常见ES6问题集锦(14)

genedna / 3488人阅读

摘要:函数的关键字的作用是停止执行退出函数暂停执行,等待方法调用停止执行,可自行恢复执行答案解析函数可以有很多个。简答题说出至少个的新特性,并简述它们的作用。简答题答关键字,用于声明只在块级作用域起作用的变量。对象,更合理规范地处理异步操作。

通过对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

改:

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的理解。

对没有完全掌握的部分,接下来可以进行有针对性的训练,那么你将在距离成为大神的道路上,又更近一步啦。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109622.html

相关文章

  • 前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)

    摘要:并总结经典面试题集各种算法和插件前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快速搭建项目。 本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React html css js 经典面试题 集各种算法和插件、前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快...

    li21 评论0 收藏0
  • 前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)

    摘要:并总结经典面试题集各种算法和插件前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快速搭建项目。 本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React html css js 经典面试题 集各种算法和插件、前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快...

    AaronYuan 评论0 收藏0
  • 前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)

    摘要:并总结经典面试题集各种算法和插件前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快速搭建项目。 本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React html css js 经典面试题 集各种算法和插件、前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快...

    pumpkin9 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<