前端Javascript,ES6常见面试题

一、Javascript

  • js数据类型?及检测?

①共8种常用的6种类型:

基本类型:Number String Boolean undefined Null

引用类型:object function

不常用2种类型:Symbol bigInt

② 检测数据类型

typeof 判断数据类型

instanceof 检测是否为类的实例

constructor 检测构造函数

Prototype检测数据类型

1.浅拷贝: 将一个对象的所有属性拷贝到另一个对象  (并且改变拷贝的对象, 不影响原始对象)

浅拷贝: 只能拷贝一层对象,或者一层数组,复杂会有bug

两个方法:     

(1)Object.assign()       

(2) ... 展开运算符

2.深拷贝: 将一个对象的所有属性拷贝到另一个对象

(并且改变拷贝的对象, 也不影响含多层对象的原始对象)

三个方法:

(1)通过递归实现深拷贝

(2) JSON.stringify() JSON.parse()

(3) lodash

3.函数递归:函数内部自己调用自己, 这个函数就是递归函数

  • Javascript中的原型和原型链有了解吗?

原型:

              1.显示原型:prototype,是每个函数拥有的属性,它指向函数的原型对象

function person(){}

console.log(person.prototype)

              2.隐式原型:_proto_,是每个对象拥有的属性,它指向创建该对象的函数的原型对象。

原型链:

原型链就是在当前对象中找不到定义的话,会在当前对象的原型对象上继续查找,直至undefined。

原型和原型链存在的意义是什么?

实例对象可以共享构造函数原型属性和方法,节省内存。

构造函数原型上的属性和方法越多, 节省内存越大。

  • 什么是作用域,作用域链?

就比如 if 判断if 判断里定义的的一个变量就叫作用域,如果在判断外定义一个变量就叫全局作用域

  • 说说你对闭包的理解以及使用场景?

①闭包:在一个函数内部创建另一个函数(函数套函数)

优点:可以将一个变量长期储存在内存中,用于缓存,可以避免全局变量的污染

缺点:函数中的变量都被保存在内存中,参数和变量不会被垃圾回收机制回收,

会导致内存泄漏,否 则会影响网页性能,卡顿问题

内存泄漏:不再使用到的内存,如果没有及时释放,就叫做内存泄露

  • 说说你对Javascript中this对象的理解?

在一般情况下,this对象指的是谁一般取决于函数被调用的方式

函数有4种调用方式:

1.直接调用,在一般函数中使用this指向全局对象.

2.某个对象的方法调用,this指的是这个上级对象

3.作为构造函数调用,this指的是new出来的对象。

4.apply调用,apply方法是改变函数的调用对象,此方法的第一个参数为改变后调用这个函数的对象,this指代第一个参数

  • 你是怎么理解ES6中promise?

概念:Promise 构造函数是同步执行的,promise.then 中的函数是异步执行

三种状态:

pending(等待中)、resolved(已经完成)、rejected(得到结果)

Promise的状态是否可改变?

  是不可变的。当promise进入fulfilled或rejected后状态不可改变

Promise如何解决地域回调?

当我们发起网络请求时,有可能需要一个请求的结果返回后再执行下一个请求,

这样可能会形成回调地狱

如何让Promise顺序执行?

通过async  await可使得Promise按顺序执行

Promise 构造函数:

1)Promise.then方法(里面有两个函数,一个是成功调用,一个是失败调用)

2)Promise.cath方法(用来捕获promise异步操作失败的方法)

3)Promise.reslove方法 (创建Promise成功的案例)

4)Promise.reject方法 (创建Promise失败的案例)

5)Promise.all()方法 (接收一个包含多个promise对象的数组,等待所有的都完成时,

返回存放他们结结果的数组,全部异步操作执行完成后,执行.then方法)

6)Promise.race()方法 (接收一个包含多个promise对象的数组,

数组内第一个完成的promise对象 决定了整个promise对象的状态的,

有一个异步操作执行完成后,就执行.then方法)

  • async/await

async函数返回值是一个promise对象,返回的promise的结果是由函数执行的结果决定

是promise链式调用的优化,属于es8语法

  • es6有哪些新特性?

1.var与let、const

2.模板字符串

3.展开数组 ...

4,箭头函数

5.函数传递参数的时候的默认值

6.解构赋值

7.对象字面量简写

  • var与let、const有什么区别?

var变量提升 函数作用域 值可更改

let,const 不存在提升 块级作用域,const值不可更改

  • 说说函数节流和防抖?有什么区别?如何实现?

概念:控制函数在高频事件下的触发次数,降低函数执行频率,节省计算资源,提高性能。

不然的话,会容易造成网络阻塞,页面卡顿,或者数据错乱覆盖等情况。

两者区别:

防抖

节流

高频事件下,控制执行最后一次

高频事件下,控制(函数)执行的次数。也就是一个单位时间内,只允许执行1次

相同点:

都可以通过使用 setTimeout 实现

目的都是,降低回调执行频率。节省计算资源

不同点:

函数防抖,在一段连续操作结束后,处理回调,利用clearTimeout和 setTimeout实现。函数节流,在一段连续操作中,每一段时间只执行一次,频率较高的事件中使用来提高性能

函数防抖关注一定时间连续触发的事件,只在最后执行一次,而函数节流一段时间内只执行一次

应用场景

防抖在连续的事件,只需触发一次回调的场景有:

搜索框搜索输入。只需用户最后一次输入完,再发送请求

手机号、邮箱验证输入检测

窗口大小resize。只需窗口调整完成后,计算窗口大小。防止重复渲染。

节流在间隔一段时间执行一次回调的场景有:

滚动加载,加载更多或滚到底部监听

搜索框,搜索联想功能

  • == 和 === 的区别和使用场景?

根据数据类型,和值进行比较,===相对于严谨

JavaScript中会被判定为垃圾的情形如下:

对象不再被引用;

对象不能从根上访问到;

常见的GC算法如下:

(1)标记清除法

(2)引用计数法

(3)标记整理

(4)分代回收

  • 对栈和堆内存有了解吗,二者的区别

堆(heap):堆用来存放进程运行中被动态分配的内存段,需要程序员分配和释放。

栈(stack):在栈存放函数的参数值,返回值,局部变量等,由系统自动分配和释放。

区别:管理方式,空间大小,碎片问题,生长方向,分配方式,分配效率(后期补充)

  • Javascript中的事件模型如何理解?

事件模型可以分为三种:

原始事件模型(DOM0级)

标准事件模型(DOM2级)

IE事件模型(基本不用)

  • 介绍一下宏任务和微任务

宏任务:setTimeout,setInterval,Ajax,DOM事件 (DOM渲染后触发)

  • 微任务:Promise,async/await (DOM渲染前触发)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值