ECMAScript 更新


ES5

  • 新特性
    • 严格模式”use strict”
    • String.trim()
    • Array.isArray()
    • Array.forEach()
    • Array.map()
    • Array.filter()
    • Array.reduce()
    • Array.reduceRight()
    • Array.every()
    • Array.some()
    • Array.indexOf()
    • Array.lastIndexOf()
    • JSON.parse()
    • JSON.stringify()
    • Date.now()
    • 对象属性 Getter 和 Setter
  • 语法更改
    • 对字符串的属性访问 [ ]
    • 数组和对象字面量中的尾随逗号
    • 多行字符串字面量
    • 作为属性名称的保留字

ES6

  • 变量的解构赋值
  • 字符串的扩展
  • 字符串的新增方法
  • 正则的扩展
  • 数值的扩展
  • 函数的扩展
  • 数组的扩展
  • 对象的扩展
  • 对象的新增方法
  • Symbol
  • Set 和 Map 数据结构
  • Proxy
  • Reflect
  • Promise 对象
  • Iterator 和 for…of 循环
  • Generator 函数的语法
  • Generator 函数的异步应用
  • async 函数
  • Class 的基本语法
  • Class 的继承
  • Module 的语法
  • Module 的加载实现
  • 编程风格
  • 读懂规格
  • 异步遍历器
  • ArrayBuffer

ES7

  • 指数运算符(幂): **
  • Array.prototype.includes(value , firstIndex) : 判断数组中是否包含指定 value

ES8

  • 字符串填充(padStart 和 padEnd)
  • Object.values // 当把数字当做对象的键的时候,返回的数组以键的值升序排序
  • Object.entries
  • Object.getOwnPropertyDescriptors()
  • 函数参数列表和调用中的尾随逗号
  • Async Functions (异步函数)
  • 共享内存 和 Atomics

ES9

  • 对象的 Rest(结构)/Spread(扩展)
  • for await of 异步迭代
  • Promise.prototype.finally()
  • 正则 (lookahead) 先行断言/(lookbehind) 反向断言
  • 正则表达式 Unicode 转义\p{…}和\P{…}
  • 正则表达式命名捕获组(groups)
  • 正则表达式 dotAll 模式 /s

ES10

  • 新特性
    • Array.prototype.{flat,flatMap}:用来打平数组
    • Object.fromEntries??Object.entries 的逆运算
    • String.prototype.{trimStart,trimEnd}:规范化字符串 trim 方法(广泛实现的非规范版本叫 String.prototype.trimLeft/trimRight)
    • Symbol.prototype.description:返回 Symbol 的描述信息
  • 语法修改
    • Optional catch binding:允许省略 try-catch 结构中 catch 块的参数部分
    • Array.prototype.sort:要求排序算法必须是稳定的(相等元素排序前后顺序不变)
    • Well-formed JSON.stringify:要求 JSON.stringify 返回格式良好的 UTF-8 字符串
    • JSON superset:字符串字面量中允许出现 U+2028(LINE SEPARATOR)和 U+2029(PARAGRAPH SEPARATOR)
    • Function.prototype.toString revision:要求返回 function 源码文本,或标准占位符,注释

ES11

  • # 私有变量
  • Promise.allSettled 解决 promiese.all 中一个 reject 的缺陷
  • ?? 空值合并运算符 (解决合法假值 ‘’ , 0 )
  • ?. 可选链运算符
  • BigInt
  • dynamic-import 动态引入
  • globalThis // window || self || global

chromeV8

  • 垃圾回收

    • 短期内存空间
      • 方法: 新生代/老生代替换
      • 结果 多次存活并交换的对象,存入常用内存空间
    • 常用内存空间
      • 方法: 分片 + 增量标记清除 毫秒级别
  • 工作原理

    • parse 解析器 -> 成 AST 语法树
    • interpreter 解释 -> 字节码 (可直接执行,出现一次) 执行后清除 AST 内存空间
    • 根据字节码优化 编译成 -> 机器码(可直接执行,出现多次的热点函数,优化并记录。)
    function add(x, y) {
      return x + y
    }
    
    add(1, 5) //字节码执行
    add(1, 6) // 优化记录函数并优化成机器码(速度更快,消耗更少)
    add(5, 6) // 优化后的机器码执行
    add('hello', 'Tom') //  回退 变成字节码执行   体现出TS的优势

Important

  • WeakSet 只能储存对象, WeakMap 键名只能是对象
  • js 代码预解析,等号右边不解析,对比 import(静态加载)
  • 隐式转换会调用 valueOf 和 toString 方法

参考


Author: yanstars
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source yanstars !
  TOC