ES6练习题(二)
- 出题人:杨标
- 时间:2021年1月26日
- 适用班级:H2003
- 主要内容:ECMAScript6
-
说出至少5个ES6的新特性,并简述它们的作用。(简答题)
这个题目多半会在面试的时候问
let
与const
变量与常量的定义- 解构
- 展开运算符,
for...of
,迭代器,生成器 Symbol
数据类型- 数组的扩展
find/findIndex,Array.of,Array.from(),Array.prototype.fill()
等 - 模块字符串
- 函数的扩展,箭头函数,无构造函数的函数,函数默认值,
rest
参数 Proxy
代理与Reflect
反射Set
与Map
这是ES6新出的数据结构class
关键字与extends
继续,static静态,get/set
访问器属性Promise
异步的处理方式- 模块化
-
使用解构赋值,实现两个变量的值的交换(编程题)。
let [a,b] = [1,2]; [b,a]=[a,b]; //这样就实现了值的交换
-
解释一下什么是暂时性死区?(简答题)
它是在使用
let/const
在定义变量的时候一种特殊的情交let a = "hello"; function abc(){ console.log(a); //这里就是暂时性的列区 let a = 123; }
-
利用数组推导,计算出数组 [1,2,3,4] 每一个元素的平方并组成新的数组
let arr = [1,2,3,4].map(item=>item**2);
-
用箭头函数的形式改写下面的代码。(ES5 to ES6改写题)
arr.forEach(function(v,i) { console.log(i); console.log(v); });
arr.forEach((v,i)=>{ console.log(i); console.log(v); })
上面的题目无非就是让我们把普通函数改写成箭头函数
-
设计一个对象**,键名的类型至少包含一个symbol类型,**并且实现遍历所有key。(编程题)
let stu = { userName: "邓娜", sex: "女", age: 18, [Symbol("第一个")]: "hello", [Symbol("第二个")]: "world" } Reflect.ownKeys(stu).forEach(item=>{ console.log(item); })
这个地方的重点就在在于
Reflect.ownKeys()
这个方法可以获取普通的属性,数字的属性(索引),还可以获取Symbol
的属性,这个方法就相当于我们之前所学习的Object.keys()
以及Object.getOwnerPropertySymbols()
两个方法的结合扩展:
Reflect.ownKeys()
能不能够找到enumerable:false
的属性????? -
有一本书的属性为:{“name”:“《ES6基础系列》”, ”price”:56 };要求使用Proxy对象对其进行拦截处理,name属性对外为“《ES6入门到懵逼》”,price属性为只读。(练习题)
let _book = { name: "《ES6基础系统》", price: 56 } //要实现拦截 代理 , let book = new Proxy(_book, { get(target, property, receiver) { if (property == "name") { return "《ES6入门到懵逼》"; } else { return target[property]; } }, set(target, property, value, receiver) { if (property == "price") { return; } else { target[property] = value; } }, deleteProperty(target, property, receiver) { if (property == "price") { return; } delete target[property]; } }) console.log(book.name); book.price = 0; console.log(book.price);
-
关于Set结构,阅读下面的代码,回答问题**。(代码阅读题)。**
let s =new Set(); s.add([1]); s.add([1]); console.log(s.size); //2
问:打印出来的size的值是多少?
分析:这个题目的本质其实就是让同学们去判断一下
[1]==[1]
两个对象在判断相等的时候是根据它的内存地址来判断的 -
关于Map结构,阅读下面的代码,回答问题。(代码阅读题)
let map = new Map(); map.set([1], "ES6系列"); //这里的[1]是一个对象 [1]相当于是new Array.of(1); let con = map.get([1]); //这里的[1]又是一个对象 new Array.of(1); //我们每次new的都是一个新的对象,每个对象地址是不一样的啊,所以这个地方取不到 console.log(con); //undefined
-
定义一个类Animal,通过传参初始化它的类型,如:“猫科类”。它有一个实例方法:run,run函数体内容可自行定义。
class Animal { constructor(type) { this.type = type; } run() { console.log(`我是${this.type}动物,我在跑`); } } let a = new Animal("猫科类"); a.run();
-
基于上一题的Animal类,定义一个子类Cat并继承Animal类。初始化Cat类的昵称name和年龄age。并拥有实例方法eat,eat函数体内容可自行定义
class Cat extends Animal { constructor(type, name, age) { super(type); this.name = name; this.age = age; } eat() { console.log(`我的名子叫${this.name},我的年龄是${this.age},我属于${this.type}动物,我在吃东西`); } } let c = new Cat("猫科类", "小花", 5); c.eat();