前端未来的主流技术方向有哪些?腾讯、京东、同城旅行等大厂都是怎么布局的?戳此了解 了解详情
写点什么

前端简史:你不知道的 ES4

2021 年 7 月 30 日

前端简史:你不知道的 ES4

不知道大家有没有注意到,在我们应用构建的过程中,都有目标 ES 版本这个选项,通常可以选择 ES3、ES5、ES6 甚至最新的 ES10,但是却没有 ES4 这个版本,这是怎么回事呢?


ES4 简史


通过维基百科其实可以查到,ES4 在 1999 年 2 月就已经开始起草,并且计划在 2008 年 8 月完成。但是发展过程其实并不顺利,ES4 提出了很多惊为天人的新特性,比如:类、严格类型、模块等,大有一副改革 JavaScript 之势,对于当时的 JS 生态来说,兼容成本变得非常之高。


由于过于激进,各浏览器厂商发生了严重分歧,以 Yahoo、Microsoft、Google 为首的大公司,反对 JavaScript 的大幅升级,主张小幅改动;以 JavaScript 创造者 Brendan Eich 为首的 Mozilla 公司,则坚持当前的草案。


在 2008 年 7 月 ES4 发布前,ECMA 临时开会决定,中止 ES4 的开发,废除该版本。并且将其中涉及现有功能改善的一小部分,发布为 ES3.1(后改名为 ES5),而将其他激进想法放入以后的版本(ES.NEXT),由于会议的气氛,该版本的项目代号起名为 Harmony(和谐)。


ES4 草案中有什么

Classes(类)


类最终是在 ES6 中被实现的,但其实在最早的 ES4 草案中,就有了类的定义:


class Bar {  var val = 1  const pi = 3.14  // A function  function f(n) {    return n + val * 2  }  // Getters and setters  function set foo(n) {    val = n  }  function get foo() {    return val  }}
复制代码


可以发现 ES4 的语法和 ES6 中类的语法有着细微差别,另一个令人惊讶的地方就是没有 this 。

ES4 还为类提供了以下关键字:


  • static

  • final

  • privateprotectedpublic

  • prototype

Interfaces (接口)


ES4 中引入了接口的概念,跟我们今天使用的 Typescript 很像:


interface MyInterface {  function foo();}
复制代码


Strict typing(严格类型)


ES4 中引入了严格类型检查:


function add(a: int, b:int): int {  return a + b;}
复制代码


它还有类似于 Typescript 的联合类型:


// typescriptvar a: number | string;// es4var a: (number, string)
复制代码


ES4 还具有泛型:


class Wrapper<T> {  inner: T}
复制代码


Like 关键词


默认情况下,ES4 中的类型必须是精确类型,但是使用 like 关键字,您可以减少限制:


function getCell(coords: like { x: int, y: int }) {}
复制代码


所以有一种可能, ES4 中类型是基于名 义子类型,而不是 结构子类型


  • 名义子类型:在其中只有类型声明的名字相同才算是相同类型,子类型关系必须被显式声明。C、Java 等语言均属于这类。

  • 结构子类型:在其中两种类型的结构组成决定了一种类型是否是另一种类型的子类型。Typescript 属于此类


New types(新的类型)


在现在的 ES 版本中,我们已经有了 booleanobjetcarraynumberBigInt 等多种基本类型,但是 ES4 草案中还计划引入:


  • byte 字节类型

  • int 整型

  • unit 无符号整型

  • double 双精度浮点型

  • decimal 精确数值型


但是在现如今的 ES 发展计划中,只有 decimal 类型或许在将来会被实现,最终看起来可能会是这个样子:


const allowance = 1.50m
复制代码


其实 m 这个后缀在 ES4 中也存在,用来表示价格。


triple-quoted strings (三引号字符串)


// ES4const hi = """Hello my name is"Evert"""";// ES6const hi = `Hello my name is "Evert"`;
复制代码


是不是有 python 内味了。当然在 ES6 中引入了新的模板字符串,看起来会更好一点。


Packages(包)


包有点像我们现在的模块,可以在其他文件导入,但是与 ES6 模块不同,包的命令空间更像是一个全局的命名空间,有点像 java


package com.evertpot {  // Private  internal const foo = 5;  class MyClass {   }}
复制代码


按以下方式使用此类:


const myObj = com.evertpot.MyClass;// 或者import * from com.evertpot;const myObj = MyClass;
复制代码


Generic functions(泛型函数)


使用 generic 关键词申明一个泛型函数,有点类似于 Typescript 中的“重载函数”,但并不完全相同:


class Foo {  generic function addItem(x);  function addItem(x: int) {  }  function addItem(x: number) {  }}
复制代码


ES4 函数重载更强大的地方在于:重载是在运行时的,而 Typescript  是在编译时。


E4X


E4X 全名为 ECMAScript for XML,下面是一段 E4X 代码:


const myClass = 'welcome';const name = 'Evert';const foo = <div class={myClass}>{"Hello" + name }</div>;
复制代码


看起来是不是很熟悉?我怀疑 JSX 就是借鉴的 E4X 😆。虽然 ES4 从未发布,但 E4X 曾经在 Firefox 中是可以工作的,直到在 Firefox 10 中才被删除。


More features(更多特性)


除了上述介绍的,其实 ES4 中还有很多其他特性,比如:let const 块级作用域,generator yield 异步方案等等。


后记


其实在现在看来,ES4 中的很多概念都是很激进的,对于当时的 JS 生态(IE5 时代)来说,用 “颠覆” 一词来形容也不为过,其中也有很多激进的特性留了下来,最终在 ES6 中被实现。纵观这段历史,如果当时 ES4 被实现了,现在的 JS 生态可能是一番不一样的景象。


头图:Unsplash

作者:高翔

原文:https://mp.weixin.qq.com/s/-Q2bObgW4ZwmrPo7aUQBmA

原文:前端简史:你不知道的 ES4

来源:微医大前端技术 - 微信公众号 [ID:wed_fed]

转载:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


2021 年 7 月 30 日 20:551

评论

发布
暂无评论
发现更多内容

第10周总结+作业

林毋梦

领域驱动设计(DDD)实践之路(二):事件驱动与CQRS

vivo互联网技术

DDD 架构设计 CQRS

libuv 异步模型之设计概览

Huayra

libuv 异步模型

智“营”时代,众盟科技荣膺“2020毕马威中国领先消费科技TOP50企业榜单”

人称T客

一瓶可乐的自动售货机指令“旅程”

华为云开发者社区

物联网 嵌入式 华为云 数据传输 无线通信

JavaScript中的正则表达式详解

华为云开发者社区

Java 正则表达式 程序员 字符串 语法

翻译: Effective Go (5)

申屠鹏会

golang 翻译

MySQL explain 中的 rows 究竟是如何计算的?

架构精进之路

MySQL

MySQL备份脚本,应该这么写

Simon

MySQL

网站改版神秘公式,教你躲避改版陷阱

北柯

创业 网站 网站搭建 网站改版

应用研发平台特惠专场,助力企业加速数智化发展

应用研发平台EMAS

推荐一个替代印象笔记,onenote的神奇笔记!

申屠鹏会

笔记

年近而立,Java何去何从?

华为云开发者社区

Java 程序员 编程语言 开源代码 Bugayenko Yegor

图解JavaScript——代码实现(new、Object.create()、Object.assign()、flat()等十四种代码原理实现不香吗?)

执鸢者

Java 前端 代码原理

troubleshoot之:分析OutOfMemoryError异常

程序那些事

Java JVM 异常 JIT

Phalcon注解学习

半亩房顶

php phalcon

AI能写浙江高考满分作文了!在线满分作文生成器,一键圆你满分梦

程序员生活志

AI

分苹果

书旅

算法 LeetCode

二叉查找树-增删查和针对重复数据的 Java 实现

多选参数

数据结构 算法 二叉树 数据结构与算法

Rust竟然没有异常处理?

袁承兴

rust 异常 java异常处理

腾讯人均月薪7.5w,我这是又被平均了?

程序员生活志

腾讯 职场 薪资

守护进程

书旅

php 进程 守护进程

架构师训练营 - 第 7 周学习总结

红了哟

HashMap、LinkedHashMap 学习笔记

陈俊

敏捷软件工程实践书籍

Bob Jiang

敏捷 敏捷书籍 工程实践

面试造火箭,看下这些大厂原题

前端有的玩

Java 前端 面试题

合约一键跟单软件开发技术,跟单系统搭建app

WX13823153201

比特币 区块链

队列高级应用之设计一个高性能线程池

架构师修行之路

分布式 线程池 架构设计 架构师

一口气搞懂「文件系统」,就靠这 20 张图了

小林coding

操作系统 计算机基础 文件管理 文件存储 文件系统

面试官:说下对cookie,session,Token的理解

Java小咖秀

Java Java 面试

实践总结:在 Java 中调用 Go 代码

jiacai2050

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

前端简史:你不知道的 ES4-InfoQ