2020前端面试题

295 阅读2分钟

JS

for,forEach,map的区别

for是老循环,forEach没有返回值,map会返回一个新数组

array.reduce方法

回调函数接收4个参数,初始值/上一次调用返回的值,当前被处理的元素,索引,原数组
和回调函数并列,可以传入初始值

let,const和var的区别

  • var 声明的变量会挂在在winodw上,let和const不会
  • var 声明的变量有变量提升,let和const没有
  • let和const形成块作用域 var没有
  • let不能声明同名变量 var可以,后者替换前者
  • const不能变的是指向的内存地址

JS的基础数据类型有哪些

  • undefined null string number boolean object symbol
  • 使用typeOf 判断类型 array和null 都会返回object

如何判断一个对象是不是数组

  • 使用 arr instanceof Array 返回true or false
  • 使用 arr.constructor===Array 返回true or false

数组和字符串互转

  • arr.toString()
  • arr.join()
  • string.split()

什么是类数组?如何把类数组转换成数组?

类数组就是拥有length属性,但是没有数组方法的对象

  • arr.slice.call(likeArray) / Array.prototype.slice.call(likeArray)
  • arr.from(likeArray)

set和weakset

  • set不会有重复的值
  • 使用add添加内容
  • weakset和set一样,但是weakset的内容只能是对象

map和weakmap

  • map就是键值对的集合,但是key可以是任意内容
  • weakmap和map一样,但是weakmap的键只能是对象

什么是Symbol,它的使用场景是什么

  • Symbol不会被for in 枚举出来,可以用来定义一些不需要操作和访问的属性,也叫定义私有变量

了解JS的作用域么,函数作用域是在什么时候形成的

  • 作用域分为全局作用域和函数作用域
  • 最大的用处就是隔离变量

浅拷贝和深拷贝

  • 这个概念只在object

什么是闭包

  • 是指有权访问另一个函数作用域中变量的函数
  • 缺点:不能被垃圾回收,会导致内存用量增大

在浏览器中输入url至看到页面,发生了什么?

  • DNS解析
  • TCP连接
  • HTTP请求与响应
  • 客户端浏览器解析渲染
  • 连接结束

  • 其中浏览器解析渲染包含HTML词法、语法的解析、CSS解析、DOM树生成、渲染树建立、屏幕绘制

get和post请求的区别

  • get可以被缓存,post不可以
  • get的参数在url里,有长度限制

new一个对象的过程

  • 创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型
  • 属性和方法被加入到 this 引用的对象中
  • 新创建的对象由 this 所引用,并且最后隐式的返回 this

ajax 解决浏览器缓存问题

  • 请求头设置:Cache-Control","no-cache"