对于我,一个普通的前端开发而言,平日多数的工作模式就是使用框架封装好的API和第三方库,从后端获取到数据之后渲染到页面上,久而久之对于原生的JavaScript的熟练度越来越低,正好在去年还是前年就购入了广受好评的《JavaScript高级程序设计(第4版)》,索性按照书中的目录和纲领重新将原生JavaScript过一遍,然后在这个过程中会输出一些总结的笔记,毕竟最好的输入就是输出,这个还是有一定的道理的😄。
- 搞明白不会的知识
- 巩固已经学会的知识
对于学习的途径我个人认为可以是多样化的,不局限于知识来源的渠道,只要达到学习的目的即可,比如以下渠道都会是我学习的渠道,但总体是以书籍和MDN文档为纲领,以其余方式为辅助。这也就意味着你在其他地方看到过的对于某个知识点的描述也有可能出现在我这里,因为我的目的是学习知识不是搞创意比赛,如果有其他同学对于某个知识点总结的比我更加好更加全面,我会直接拿来为我所用。
- 书籍《JavaScript高级程序设计(第4版)》
- MDN官方文档
- GitHub开源仓库
- B站视频
- 博客
- 公众号
- ...
目前的想法是将原生JS的学习分为两个方向同时去进行:
- 按照《JavaScript高级程序设计(第4版)》为纲领对于基础知识点的进行系统性的学习,提升自己的知识储备,重点是打好基础
- 另外一方面是对于核心API实现、高频面试题手写、常见组件封装等这类型题目的实现,重点以每日一题的形式输出
- JS发展历史及HTML中的script标签
- 基础语法、变量、操作符、语句
- 数据类型及其转换
- 作用域和执行上下文
- 垃圾回收机制
- 数组
- 对象
- Map和WeakMap
- Set和WeakSet
- 面向对象、类和继承
- 代理
- 反射
- 函数
- 迭代器和生成器
- Promise
- BOM
- DOM
- 事件
- 动画
- HTML5+ Web Api
- 错误处理
- Ajax和Fecth
- 客户端存储
- 模块化规范
- Web Worker
- forEach
- map
- filter
- every
- some
- reduce
- find
- findIndex
- fill
- includes
- join
- flat
- splice
- new
- instanceof
- keys
- values
- entries
- fromEntries
- is
- assign
- Object.create
- call
- apply
- bind
- setTimeout实现setInterval
- setInterval实现setTimeout
- compose组合函数
- curring函数柯里化
- lazyMan惰性函数
- partial偏函数
- sleep函数
- memorize缓存函数
- onceFun 只执行一次的函数
- slice
- substr
- substring
- JSON.stringify
- JSON.parse
- 原生Ajax封装
- 防抖
- 节流
- 数组去重
- 数组排序
- 深拷贝
- 浅拷贝
- 继承
- JSONP
- each方法手写
- 判断对象是否相等
- 判断对象是否成环
- 计算对象层数
- 数组扁平化
- 对象扁平化
- a==1 && a==2 && a==3成立
- 打乱数组
- 判断数据类型
- LRU缓存算法
- 发布订阅模式 事件总线
- 观察者模式
- DOM树和JS对象互转
- 手写HTML Parser
- 计算Local Storage总容量
- 解析URL为键值对
- 每隔1秒输出一个数字
- 随机数和随机颜色值生成
- 正则切分千分位
- 对象数组去重
- 大小驼峰转化
- 求数组最值
- 图片懒加载
- 超长列表渲染
- 大文件上传