面试题-JavaScript篇

1,486 阅读5分钟

1. 数组(对象、字符串)的方法(必须背)

  • Push,向数组末尾一个或多个元素,并返回数组新的长度;
  • Pop,删除数组最后一个元素,被删除的元素作为返回值返回;
  • Unshift,向数组开头添加一个或多个元素,并返回数组新的长度;
  • Shift,删除数组第一个元素,被删除的元素作为返回值返回;
  • splice,删除数组中一个或连续的元素,而且可以再删除位置添加新的元素,删除的元素作为返回值返回;
  • concat,合并多个数组,并返回一个新数组;
  • indexOf,返回置顶元素在数组中第一次出现的位置;
  • forEach,接受一个函数作为参数,遍历数组时,所有数组成员依次执行该函数,中途不可停止。

2. 数组的去重(适当背几个,会问)

  • 双层循环
  • IndexOf和includes
  • 排序去重
  • Filter方法
  • Key/value
  • Es6的set和map

3. Localstorage、session和Cookie的区别?(需要背诵,倒是没问到)

  • localstorage 和sessionStorage 本地存储,localstorage 浏览器关闭之后不会销毁 必须手动销毁,sessionStorage 浏览器关闭之后就销毁,存储大小5M,用于浏览器缓存,不与服务器通信;
  • cookie一般由服务器生成,可设置失效时间,如果浏览器生成,默认关闭后失效。一般数据存储大小为4kb,每次都携带在 http头中,保存过多数据会带来性能问题。

 

4. 重排和重绘(要背)

  • 重排是指部分渲染树(或者整个渲染树)需要重新分析并且节点尺寸需要重新计算;
  • 重绘是由于节点的几何属性发生改变或者由于样式发生改变,例如改变元素背景色时,屏幕上的部分内容需要更新。

 

5. 防抖和节流(必须背哦)

  • 防抖函数控制函数在一定时间内的执行次数。防抖意味着 N 秒内函数只会被执行一次(最后一次),如果 N 秒内再次被触发,则重新计算延迟时间;
  • 节流函数规定一个单位时间,在这个单位时间内最多只能触发一次函数执行,如果这个单位时间内多次触发函数,只能有一次生效。

 

6. 原型和原型链(全文背诵好吧,不会去看尚硅谷js高级)

每个函数偶有一个prototype属性,这个属性会指向一个对象,就是调用该构造函数而创建的实例的原型,可以通过实例对象的_proto_访问这个原型;实例在创建时,就会默认关联原型,并从原型继承属性;每个原型对象都会存在constructor属性指向关联的构造函数;如果访问一个实例对象的属性无果,js引擎会去原型对象中寻找,原型的原型中找,一直到Object。

7. Js的继承(六种并熟悉)

  • 原型链继承
  • 借用构造函数继承
  • 组合继承
  • 原型式继承
  • 寄生式继承
  • 寄生组合式继承

8. 怎样优化页面加载速度?(必背好吧,可以作为项目中的所做之事)

  • 优化图像
  • 使用cdn
  • 减少DNS查找
  • 精简js、css代码
  • 压缩组件
  • 懒加载
  • 减少http请求
  • 避免重定向
  • 删除重复脚本
  • 利用浏览器缓存

9. 跨域问题(必须背好吧)

  • 同源策略限制
    • Cookie,localStorage和indexDB无法读取
    • DOM和JS对象无法获取
    • Ajax请求无法发送
  • 解决方法
    • Jsonp跨域
      • 只能解决get跨域
      • 原理:动态创建一个script标签的src属性不受同源策略限制。因为所有的src属性和href属性都不受同源策略限制。可以请求第三方服务器数据内容。
    • 跨资源共享CORS
      • 原理:服务器设置Access-Control-Allow-OriginHTTP响应头之后,浏览器将会允许跨域请求
      • 限制:浏览器需要支持html5,可以支持POST、PUT兼容IE9以上。
    • Node代理跨域
    • Nignx跨域

10. Js判断数据类型的方法有哪些?(要背,简单的)

  • Typeof运算符
  • Instanceof
  • Object.prototype.toString.call(xxx)方法

11. New的作用(没问到过)

  • 在内存中创建一个新对象
  • 这个新对象内部的[[prototype]]特性被赋值为构造函数的prototype属性
  • 构造函数内部的this被赋值为这个新对象(即this指向新对象)
  • 执行构造函数内部的代码(给新对象添加属性)
  • 如果构造函数返回非空 对象,则返回该对象;否则,返回刚创建的新对象。

12. This的指向(背,问到过不少次)

  • This总是指向函数的直接调用者;
  • 如果有new关键字,指向new出来的那个对象
  • 在事件中,this指向触发这个事件的对象,ie的attachevent中的this指向window

13. Display:none和visiblity:hidden区别(问的比较少,背一下)

  • Display:none;不会渲染不占据空间,会引起重排性能差;
  • Visbility:hidden;会渲染被隐藏占空间,引起重绘性能高,会被子元素继承。

14. 闭包(必背,不会去看尚硅谷JS高级)

当一个嵌套的内部函数引用了外部函数的变量时,就产生了闭包。闭包是被嵌套的内部函数。作用:使函数内部的变量在执行完后仍然存在内存中,让函数外部可以操作函数内部的变量。

15. DOM是什么?(需要了解)

  • DOM,全称Document、Object、Model文档对象模型;
  • JS通过DOM来对HTML文档进行操作。