一、手写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}$