衍生技术包括:数组方法,字符串方法,set和map,模块化的写法,promise,共享内存,原子操作和webworker,迭代器
JS 包含核心 ES,DOM,BOM
ES是标准,定义了语法,
一般来讲,ES6是分水岭,ES6包括了ES7和8,严格意义上讲,还是有分别的,但是就平常解释或者使用,一般ES6包括7和8
ES6加入了面向对象的写法,class,以及相关的继承,函数方面新➕箭头函数,参数也加了默认参数,扩展运算符,更方便编写函数和对象的属性。语法方面,添加了模版字符串,在框架中用的比较多,解构赋值也是框架用的比较多,把对象的属性都提取出来,数组使用数组的中括号,对象使用对象写法,和对象的写法一样,数据结构方面,添加了数组的filter,find,reduce等方法,添加了set和map数据结构,ES的模块也有了新的写法,导入导出多个JS文件的函数,异步方面,改变了传统的XML的ajax交互,加入了Promise,有很多优点,更加标准了,我们可以直接使用fetch来进行通信。
ES6新加入的这些,还可以细说的有,数组方法的使用,set和map的数据结构,模块化的写法,Promise的优势,这些知识的学习,我的建议是,使用费曼学习法,就目前而言,费曼很简单,就了解知识本身,给别人讲,遇到问题,再继续了解,再讲,小黄鸭,但是更专业的,我认为还是需要5W2H分析,这个也是我目前欠缺的,是什么,为什么,谁,什么时候,什么时间,怎么做,多少,这是基础示意,用来学习技术,应该是,作用,原理,本质(原型,数据类型),解决什么问题,用法,效果(跟其他对比),这两个学习方法相结合,应该能更深刻的理解这些知识。
然后就是ES7多了数组的includes方法,多了**操作符,ES8多了async,异步变同步,本身是通过async把操作包装成promise,用await等待操作执行完毕,Object的values方法返回自身可以枚举的属性的值,entries返回键值对,字符串的padding方法,在字符串前面或者后面添加字符,达到一定长度,对象的getOwnPropertyDescriptors返回对象的描述符号,ShareArrayBuffer共享内存,Atomics原子操作,这个是用来共享内存的,帮助webworker更好的执行多线程,webworker通过transfer把数据给另一个线程之后,自己就没有权限了,并且每次都很慢,都需要structuredClone拷贝,然后引入了ShareArrayBuffer用来共享内存,操作还是需要深拷贝一下,但是,新的线程和旧的线程访问的都是同一个内存地址,如果要实现监听就需要改变这个值,但是引入这个共享内存之后出现了时序攻击,攻击者可以通过共享内存访问到其他网站的数据,performence的now返回的本来是纳秒的时间,因为这个精度下降,但是共享内存能返回纳秒级别的,所以被禁用,后面才返厂,但是需要保证有安全证书,ssl,而且需要设置请求头为同源或者跨域规则,然后之前的修改共享内存,用的是循环,而且当数据不变的话,是死循环,这样编译器也会优化,会新创建一个临时值,在一个文件中如果确定不会改变,就会创建临时值,但是其他文件会改变,所以这会有问题,然后引入了Atomic,通过wait让线程休眠,notify通知,这样就解决了问题。
共享内存和原子操作也需要细说
ES9新增了,异步迭代器,promise的finally方法,rest和spread,正则,模版字符串修饰,对象描述符共享,异步迭代器的作用是允许异步迭代异步数据流,Symbol的asyncIterator返回迭代器对象,分别获取异步请求的结果,通过yield打断点,finally就是总会返回一个回调函数,rest允许把剩余属性收集,spread展开多个属性,扩展符的感觉,正则,
需要细说一下generator