概述
JS高频面试题
JavaScripts基本类型有哪些
number、string、boolean、undefined、symbol、null、object、BigInt
数据类型检测的方法有哪些
typeof只能检测函数、number、(数组、null都是object)、布尔值、字符串
数组可以用Array.is,引用类型的undefined无法检测
instance of 判断对象原型,判断array、object、function为true or false
null和undefined的区别
null和undefined都是基本数据类型
nul:表示空对象,不存在,一般使用在一些可能返回对象的变量作为初始化
undefined:表示变量声明但是未定义,没有进行初始化,无法识别其数据类型
typeof null是什么数据类型
object 就此可以说是一个bug,在判断数据类型时,是根据机器码低位标识来判断的,而null的机器码标识为全0,而对象的机器码低位标识为000。所以typeof null的结果被误判为Object
object.assign和扩展运算法是深拷贝还是浅拷贝,两者区别
二者都是浅拷贝
object.assign的第一位参数为目标函数,往后参数都为源对象,然后把所有源对象合并到目标函数里面形成一个新对象,因此会触发ES6的setter
扩展运算符(…)使用它的时候,目标对象或者数组的每一个值都会被拷贝到一个新的对象或者数组,但是不会拷贝其继承的属性和类的属性,但是会拷贝ES6 symbol属性
**let、const、var的区别 **
作用域:let、const具有局部作用域,解决了ES5两个问题:
1.内层变量作用到全局,
2.内层变量覆盖外层变量
变量提升:var在声明之前也可以使用变量,const、let 只能在声明变量后才能够使用
全局属性:浏览器的全局变量是window,node的全局变量为global,用var声明的变量可以作为全局变量,并且会添加进全局对象里面
重复声明:var声明的变量可以被后面重复声明的变量覆盖,const、let不允许声明变量
const对象的属性可以修改吗
const 声明的变量的值可以改变,其内存地址不允许更改
箭头函数与普通函数的区别
箭头函数比普通函数简洁
箭头函数没有自己的this
箭头函数没有自己的参数arguments
箭头函数没有prototype
箭头函数继承的this方向永远不会改变
applu、call、bind不能改变箭头函数的this指向
箭头函数不能作为构造函数使用
箭头函数的this指向哪⾥?
没有自己的this,箭头函数中的content(上下文)
new操作符的实现原理
创建一个空对象
设置原型,将对象原型设置为函数的prototype原型对象
让函数的的this指向新对象,执行构造函数代码(为这个新对象添加属性)
判断返回值类型,如果是值类型,就返回创建的对象,如果是引用类型,就返回引用类型对象
节流
在一段时间内,连续点击事件,只有第一次点击事件生效回调函数,过一段时间后才能第二次触发,(一段时间内只有第一次点击事件生效触发回调函数)
应用场景:click点击事件、滚轮滑动
function throttle(fn,delay){
let timer = null
return function (...arg){
if(!time){
fn.apply(null,args)
timer = setTimeout(()=>{
fn.apply(null,args)
timer
),delay}}
}
}
防抖
触发时间后,n秒后触发回调函数,如果在n秒时间内再次触发事件,则时间重新开始计算
(一定时间内最后一次触发)
应用场景:input框输入时候,减少请求次数,节约请求资源
function mydebouce(fn, Delay) {
let timer = null;
return function (...agrs) {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(function () {
fn.apply(null, agrs);
timer = null;
}, Delay);
};
}
最后
以上就是优美牛排为你收集整理的JS高频面试题随心背(更新)的全部内容,希望文章能够帮你解决JS高频面试题随心背(更新)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复