1.数据类型
String Number Boolean Object Null Undefined Symbol(es6)
2.深拷贝和浅拷贝
浅拷贝:创建一个新的对象 将原有的对象属性值完整的拷贝过来,包括原始的类型值和引用类型的内存地址 只拷贝第一层
const obj2 = Object.assign({}, obj);
深拷贝:拷贝所有的属性值,以及属性地址指向的值的内存空间
JSON.parse(JSON.stringify(obj))是最简单粗暴的深拷贝
lodash中的_.clone(obj, true)等价于_.cloneDeep(obj) 两个方法
3.数组的常用方法
concat pop() push() join() split() map() foreach() filter() reduce() some() every()
4.this的问题
可以理解为谁调用指向谁
5.call apply bind
都能改变this指向,
第一个参数都是指向的this,
bind返回函数需要bind()调用 call第二个参数以此逗号隔开, applay第二个参数放在一个数组
6.防抖和节流
防抖: 当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时
function debounce(fn,delay){ let timer = null; return function(){ if (timer) { clearTimeout(timer) } setTimeout(fn, delay) } }
节流: 使得一定时间内只触发一次函数。原理是通过判断是否到达一定时间来触发函数
function throttle (fn,delay){ var timer = null; var pre = Date.now(); return function(){ var ctx = this; var next = Date.now(); if(next-pre >= delay){ fn.applay(ctx,arguments) pre = Date.now() }else{ timer = setTimeout(fn, delay) } } }
7.Object.defineProperty()中get和set
var _nv; var v = {} Object.defineProperty(v,'11',{ get:function(){ return _nv }, set:function(nv){ _nv = nv } })