前端知识

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
    }
})
原文地址:https://www.cnblogs.com/yangjie-space/p/13967504.html