前端面试题

184 阅读3分钟

js的数据类型

  • 原始类型:Number、String、Boolean、BigInt、Symbol、null、undefined
  • 对象类型: Object

原型的作用?原型链?

之所以存在原型,是因为JS语言要实现面向对象,而原型是面向对象的实现手段之一。一个能支持面向对象的语言必须做到一点:能判定一个实例的类型。在JS中,通过原型就可以知晓某个对象从属于哪个类型,换句话说,原型的存在避免了类型的丢失。
对象可以继承它的原型对象上的属性,所以可以通过原型链实现继承。
for...inin都能读取到对象原型链上的所有属性,而要只读取对象自身的属性可以通过Object.keys()hasOwnProperty来获取和判断


function Test(name) {
    this.name = name
}
const obj = new Test('xiaoming')
// 实例的隐式原型指向它的构造函数的原型对象
obj.__proto__ === Test.prototype
Test.prototype.__proto__ === Object.prototype
Object.prototype.__proto__ === null

get和post有什么区别

promise解决了什么问题?

很多地方说到Promise是为了解决回调地狱,但其实Promise无法解决回调地狱。
Promise的出现最重要的是为了统一JS中的异步实现方案。
异步是JS中的常见场景,统一实现方案,不仅可以有效降低心智负担,更重要的是可以让不同的异步场景相互联动。
Promise也无法消除回调,它只不过通过链式调用的方式让回调变得可控。

什么是vue的响应式

vue数据响应式设计的初衷是为了实现数据和函数的联动,当数据变化后,用到该数据的联动函数会自动重新运行。
具体在vue的开发中,数据和组件的render函数关联在一起,从而实现了数据变化自动运行render,在感官上就看到了组件的重新渲染。
除了vue自动关联的render函数,其他还有很多使用vue响应式的场景,比如computed、watch等等,不能仅把vue的数据响应式想象成和render的关联。

箭头函数和普通函数有什么区别?

  1. 书写方式不同,箭头函数用箭头,如果只有一个参数,可以不写括号,如果箭头函数只有一句话,可以省去return和花括号
  2. 箭头函数是匿名函数,普通函数可以是匿名函数,也可以是具名函数
  3. 箭头函数没有this,内部的this指向继承于上下文。普通函数的this取决的调用它的方式与环境
  4. call、apply、bind无法改变箭头函数的this指向
  5. 箭头函数不能用作构造函数
  6. 箭头函数没有自己的arguments,用剩余参数表示
  7. 箭头函数没有原型prototype
  8. 箭头函数不能用作Generator函数,不能使用yield关键字

react的优化方式

  1. 按需加载
  2. 类组件:shoulCompoentUpdate、PureComponent
  3. 函数组件: memo、useMemo、useCallback