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文档进行操作。