目录
5:module、export、import是什么,有什么作用?
6:Promise中的then是同步的还是异步,简单描述下执行机制?
1:封装一个Promise对象的函数,结合setTimeout模拟异步,如果传的偶数则返回(3s后)传入正确,奇数或者其他类则返回传入错误。
2:有如下一组格式学生分数,筛选及格的学生,并求及格学生的分数总和。(数组不用复制按此格式写即可)
一:简答题
1:Symbol是什么,有什么作用?
答:Symbol是一种数据类型,是类似于字符串的数据类型。
作用:阻止对象属性名冲突
模拟私有属性
定义不重复的常量
2:Set和Map是什么?有什么作用?
答:Set:类似于数组,但是成员的值都是唯一的,没有重复的值。
Map:JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制,map的键不限于字符串,对象也可以称为键。
作用:用于数据重组和数据储存。
3:Iterator是什么?
答:Iterator是迭代器。是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署lterator接口,就可以完成遍历操作,ES6新增遍历方式for...of。
原生具备lterator接口的数据有:Array,Arguments,Set,Map,String,NodeList。
4:for...in 和for...of有什么区别?
答:for in遍历索引(遍历可枚举类型)
for of遍历数组的值(遍历可迭代具备迭代器接口)
5:module、export、import是什么,有什么作用?
答:module 要在js中使用ES6的import。<script type="module "></script >,script 的type定义为module 。
export 指定输出的代码。export 命令可以出现在模块的任何位置,但必需处于模块顶层。
import导入模块功能。import导入的只是一个只读引用,等到脚本执行时根据引用才到模块里去取值。这也就是import可以按需加载的原因。
6:Promise中的then是同步的还是异步,简单描述下执行机制?
答:promise构造函数是同步执行的,then方法是异步执行的。
then()是Promise的实例方法,在Promise状态发生改变后,then()可以获得成功或失败后的值,并对其进行描述。
7:如下代码输出的结果是?
结果是:1243 。
8:下图中输出的结果是?
输出结果是 2 。
9:class中的super是做什么用的?
答:ES6 规定,子类必须在constructor()方法中调用super(),否则就会报错。super方法就是用来创建父类this对象的。
10:说说什么是浅拷贝,什么是深拷贝?
答:浅拷贝:拷贝栈地址,简单数据类型的更改之间不相互影响,但是引用数据类型的堆地址是同一个,更改会相互影响;
深拷贝:不仅拷贝栈地址,也拷贝堆地址,基本数据类型与引用数据类型的更改对原数据都没有影响。
二:操作题
1:封装一个Promise对象的函数,结合setTimeout模拟异步,如果传的偶数则返回(3s后)传入正确,奇数或者其他类则返回传入错误。
let num = prompt('输入一个数字:');
const MyPormise = new Promise((resolve, reject) => {
setTimeout(() => {
if (num % 2 == 0) {
resolve('传入正确');
} else {
reject('传入错误');
}
}, 3000)
});
MyPormise.then(
resolve => console.log(resolve),
reject => console.log(reject)
)
2:有如下一组格式学生分数,筛选及格的学生,并求及格学生的分数总和。(数组不用复制按此格式写即可)
const persons = [
{realname:’张三1’,score:60},
{realname:’张三2’,score:20},
{realname:’张三3’,score:90},
......
]
<ul id="scores"></ul>
<hr>
<input type="button" value="查找及格的学生" id="search" />
<p>及格学生如下:</p>
<ul id="pass"></ul>
<script>
let sScore = document.querySelector('#scores');
let search = document.querySelector('#search');
let pass = document.querySelector('#pass');
const scores = [
{ realname: "张三", score: 40 },
{ realname: "李四", score: 60 },
{ realname: "王五", score: 90 },
{ realname: "赵六", score: 50 },
];
let str = "";
for (var i = 0; i < scores.length; i++) {
str = str + `<li>姓名:${scores[i].realname},分数:${scores[i].score}</li>`;
}
sScore.innerHTML = str;
search.addEventListener('click', function () {
let newArr = scores.filter(item => {
return item.score >= 60;
})
let str = '';
newArr.forEach(item => {
const { realname, score } = item;
str = str + `<li>姓名:${realname} 分数:${score}</li>`;
})
pass.innerHTML = str;
console.log("及格学生分数总和为"+newArr.reduce((sum, item) => sum + item.score, 0));
})
</script>