一、手写JavaScript:

141 阅读1分钟

一、手写JavaScript:

* 变量函数提升:函数是整体提升,变量只是声明提升,let和const不存在提升。

* new的原理:获取属性,给属性赋值。

防抖节流:防抖清楚定时器,节流默认开关开。

call和apply原理:将函数fn赋值为新this的属性,切割arguments传参。

bind原理:将函数fn赋值为新的this的属性,并且返回一个函数,在函数中调用fn并且传递参数arguments。

深度克隆:简单处理JSON.stringify,JSON.parse,复杂处理需要分情况。

手写eventBus:将函数名和函数值收集都一个map中。

实现一个instanceof:判断对象的隐式原型__proto__和函数的原型prototype是否相等。

模拟Object.create:将obj赋值给newObject.prototype

实现类的继承:利用call继承属性,利用Object.create创建父类原型副本赋值给子类原型。

实现一个JSON.parse:利用eval,参数外面加上花括号。

实现一个Promise:在then函数中执行中执行异步和resolve,在resolve中执行then的 callback,并且传递异步结果。

解析url:split加concat。

前端模板引擎:while循环+exec

转换为骆驼峰:resplce+正则+slice+toUpperCase

查出现最多次数字符:(\w)\1+\g

字符串查找:indexOf

实现千分位分隔:toLocalString()

验证手机号码:1开头,[34578]匹配第二位,\d{9}$以数字结尾,限定匹配结尾。

验证邮箱:\w开头,匹配@,匹配\w,匹配.,匹配\w结尾

匹配身份证:以17位数字开头^\d{17},以1位数字或者x或者X结尾[\d|x|X]{1}$