ES6和Nodejs面试题

ES6 面试题

1.let和var的区别

var声明变量可以重复声明,而let不可以重复声明,属于TDZ暂时性死区问题
作用域不同,var是函数作用域,而let是块级作用域
var可以在声明的上面访问变量,而let不存在变量提升

2.ES6中Symbol类型的作用

ES6新增了Symbol数据类型,它用来生成一个独一无二的值,它Symbol数据常用来给对象属性赋值,让对象属性具备唯一性,不容易被覆盖。

3.箭头函数有哪些特性

(1)、箭头函数是匿名函数,不绑定自己的this,arguments,super,new.target
(2)、箭头函数会捕获其所在上下文的this值,作为自己的this值,在使用call/apply绑定时,相当于只是传入了参数,对this没有影响
(3)、箭头函数不绑定arguments,取而代之用rest参数…解决
(4)、箭头函数当方法使用的时候,没有定义this绑定
(5)、箭头函数不能作为构造函数,和 new 一起用就会抛出错误
(6)、箭头函数没有原型属性
(7)、不能简单返回对象字面量

4.ES6模板字符串的好处有哪些

1、模板字符串为构造多行字符串和字符串拼接带来了更加方便的方式。
2、同一个模板字符串可以通过使用不同的标签,对模板进行进一步处理,输出不同的结果

5.手写一个promise

var p = new Promise((resolve,reject)={if(1){resolve(‘成功’)}else{reject(‘失败’);}

})

p.then((res)=>{}).catch((err)=>{});

6.用class定义一个类

class Aniaml{static Type = "动物";

​              constructor(newName){this.name = newName;

​            }eat(){

​                         conosle.log('please eat some apples');}static drink(){

​                     console.log('please drink some water');}

}

7.class实现继承

class cats extends Animal{
    constructor(candy){
        super(candy);
    }
}

8.谈谈你对async和await的理解

async…await是基于promise的generator语法糖,是用来解决异步的,它用来等待promise的执行结果,常规函数使用await没有效果;
async函数返回一个 Promise 对象,可以使用then方法添加回调函数
当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句

9.class类中的super有哪些用法

super在类中有两种用法,一个是super方法,只能出现在constructor方法中;另一个是super对象,super对象一般出现在子类覆盖父类的方法中。

10.静态和成员的区别

静态的变量或方法归类所有,全局独一份,成员的变量或方法归对象所有,每次实例化对象成员方法和成员变量就会得到一份拷贝;对于一些通用性的属性或方法,可以考虑设置为静态。

11.谈谈你对promise的理解

Promise是为了异步数据传递,也用来解决异步回调问题;promise内部有三种状态,pedding,fulfilled,rejected;pedding表示程序正在执行但未得到结果,即异步操作没有执行完毕,fulfilled表示程序执行完毕,且执行成功,rejected表示执行完毕但失败;promise中的then一般对应成功后的数据处理,catch一般对应失败后的数据处理。

12.深拷贝的原理

操作的是值,取出对象的值,放到一个新的{},修改时不会影响到原数据;要完成对象的深拷贝需要使用递归遍历所有对象的属性进行赋值,也可以使用JSON.stringfy和JSON.parse操作。

13.set和Map的特点

Set是一种类似数组的集合类型,它与数组不同的是,不允许存在重复数据;常用操作方法有:add,delete,has,clear等;遍历使用forEach;
Map是一种类似对象的集合类型,它与对象不同的是,key可以接受对象类型,常用的操作方法有:set,get,has,delete等;遍历使用forEach

14.node的特点是什么

1)它是一个Javascript运行环境
2)依赖于Chrome V8引擎进行代码解释
3)事件驱动
4)非阻塞I/O
5)轻量、可伸缩,适于实时数据交互应用
6)单进程,单线程

15.module.exports和 exports的区别,用代码示范

module.exports是实体抛出功能方法。exports只是module.exports的引用。
let module = {
            exports: {},
        };
let exports = module.exports;
 exports.title = 'lesson';
        //此时module.exports新增title属性为lesson
 exports = { name: 'AAA' };
        //此时module.exports保持原有的内容不变

16.npm的作用

用户可以从npm服务器上下载所需要的代码,使用指定命令能够快速安装插件,卸载插件,升级插件
允许用户上传自己写的代码到npm服务器上

17.常用npm指令有哪些

自动创建npm init -y
全部安装 npm i
安装产品模式的包 npm i/install/add 插件的名字 (-D/-P/-g),-D安装开发模式的插件,-P安装生产模式的插件,-g全局安装
查询插件的存放路径npm root (-g)
升级插件版本 npm update / up / upgrade 插件的名字
查看版本号 npm -v/version

18.实现深拷贝

JSON.parse(JSON.stringify(obj))

19.iterator的作用是什么,怎么部署iterator接口

1、统一数据结构(数组,对象,map,set,数组包对象,对象包数组)的遍历方式
2、在数据结构上部署iterator接口:所谓的部署接口表现形式为,给对象或数组等集合增加iterator属性,属性的内容是一个根据iterator接口规范自行实现的方法

20.实现数组过滤重复

//方法一
let arr=[1,2,5,4,5,1,3,4,6];
let map =new Map();
function f(attr) {
    return attr.filter((item)=>{
        return  !map.has(item)&&map.set(item); 
       }
    )
}
console.log(f(arr))

//方法二
let arr=[...new set(arr)];

21.关于对象扩展的属性简写和属性名表达式写法,请各举一个例子

//属性名简写:

let title = 'lesson';

let num =5;

let obj = {

​      title,

​      num

​    };

//属性名表达式:

let title = 'music';

 obj[title] = '钢琴';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值