徜徉在知识海洋的一群鲸鱼
前端面试总结
前端面试总结

前端面试总结

原始类型有,

number,string,boolean,null,undefined,symbol

对象类型:

不是原始类型的,就都是对象类型,对象类型的赋值是内存地址,原始类型赋值

判断类型:

typeof主要用来判断原始类型,除了null,都可以显示正确类型,对于对象而言,他的结果是object,

instanceof用来判断对象类型

类型转换:

只会转换为布尔,数字和字符串,需要记住,

数字和字符串转为布尔时,除了,0,-0,nan,和空字符串,剩下的都是true

undefined和null都是false,任何引用类型都是true

剩下的转字符串时,是什么就会转换为带双引号的东西,数组也是,外面的大括号换成引号,中间间隔为,对象是数组形式的两个obj,

字符串转为数字则是非数字的都是nan

null转数字为0,而symbol会报错

对象转为原始类型

会逐步调用,valueOf和toString方法,

this

函数中的this判断,先看是不是箭头函数,返回包裹箭头函数第一个普通函数的this,如果是bind,call,apply,this是第一个

如果是new的形式,this绑定固化到实例,如果是直接调用就是window,不是就是谁调用就是谁

==和===

==会进行类型转换,再比较,===直接类型和数值进行比较

闭包

闭包的意义就是让我们可以间接访问函数变量,一般加上return会把变量传递出来,闭包主要是防止变量被污染

深浅拷贝

Object.assign来解决问题,或者let b = { …a }解决

深拷贝一般使用JSON.parse(JSON.stringify(object))

原型,var,let,const

var会存在变量提升的情况,你在下面使用var但是最顶层可以使用,一般函数会出现提升的情况,而let和const因为暂时性死区不会出现这种情况,const赋值之后不能再次赋值

原型继承和class继承

原型有组合继承,继承者需要用继承者的call方法,Parent.call(this, value),Child.prototype = new Parent(),但是会多出来一些继承者不想要的属性

而寄生组合继承,优化掉了这种情况,通过create方法

Child.prototype = Object.create(Parent.prototype, {
constructor: {
value: Child,
enumerable: false,
writable: true,
configurable: true
}
})

class继承

直接

class Child extends Parent {
constructor(value) {
super(value)
this.val = value
}
}

模块化

解决命名冲突,提高复用性,可维护性

通过立即函数来实现模块化,通过函数作用域解决命名冲突,污染全局作用域的问题,用到commonjs的语法,如export和require,是同步导入,而es module是异步导入,直接import

proxy

用来实现数据响应式

可以用来自定义对象的操作

let p = new Proxy(target, handler)第一个表示需要代理的对象,第二个表示自定义的操作,下面的例子

let onWatch =(obj,setBind,getLogger)=>{
let handler = {
get(target,property,receiver){
getLogger(target,property)
return Reflect.get(target,property,receiver)},
set(target,property,value,receiver){
setBind(value,prolerty)
return Reflect.set(target,property,value)}
}
return new Proxy(obj,handler)
}
let obj ={a:1}
let p = onWatch(obj,(v,property)=>{console.log('listening${property}change${v}'},(target,property)=>{console.log(`'${property}' = ${target[property]}`)}

而在vue中要实现数据的响应式需要在get中收集依赖,在set中派发更新。

map,reduce,filter

map接受,当前元素,索引,原数组,返回一个处理过的新数组,

filter相同参数,用来过滤

reduce接受回调函数和初始值,返回经过处理的值

回调函数也可以作为一个数组,

并发和并行,宏观的并发表示同一段时间a和b都进行切换,完成两个任务,

微观的并行是指两个线程同时进行a和b工作

回调函数

在函数里面调用另一个函数

generator