博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript过去,现在,未来的相关信息整理
阅读量:6610 次
发布时间:2019-06-24

本文共 4046 字,大约阅读时间需要 13 分钟。

hot3.png

[前言]

这几天上网无意间看到一个新名词:Javascript Harmony。 联想到以前的ES 5等,瞬间让我觉得我对javascript的过去的历史,现在的发展状况以及未来的趋势非常模糊。遂决定好好补习并且整理出一篇文档出来。

[正文]

1. Javascript的定义

一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:

  • 核心(ECMAScript)
  • 文档对象模型(DOM)
  • 浏览器对象模型(BOM)

1.1 ECMAScript

ECMAScript是一种由()通过ECMA-262标准化的脚本程序设计语言。

ECMAScript 仅仅是一个描述,定义了脚本语言的所有属性、方法和对象,并不与任何具体浏览器相绑定。实际上,它也没有提到用于任何用户输入输出的方法(这点与 C 这类语言不同,它需要依赖外部的库来完成这类任务)。Web 浏览器对于 ECMAScript 来说是一个宿主环境,但它并不是唯一的宿主环境。事实上,还有不计其数的其他各种环境(例如 Nombas 的 ScriptEase,以及 Macromedia 同时用在 Flash 和 Director MX 中的 ActionScript)可以容纳 ECMAScript 实现。

ECMAScript 描述了以下内容:

  • 语法
  • 类型
  • 语句
  • 关键字
  • 保留字
  • 运算符
  • 对象

JavaScript只是ECMAScript的实现和拓展。

1.2 文档对象模型(DOM)

DOM(文档对象模型)是 HTML 和 XML 的应用程序接口(API)。DOM 将把整个页面规划成由节点层级构成的文档。DOM定义了表示和修改文档所需的对象、这些对象的行为和属性以及这些对象之间的关系。可以把DOM认为是页面上数据和结构的一个树形表示,不过页面当然可能并不是以这种树的方式具体实现。

通过 DOM API,你可以重构整个HTML文档。你可以添加、移除、改变或重排页面上的项目。

更加详细的信息您可以参考。

1.2.3 其他DOM

除了 DOM Core 和 DOM HTML 外,还有其他几种语言发布了自己的 DOM 标准。这些语言都是基于 XML 的,每种 DOM 都给对应语言添加了特有的方法和接口。

1.3 浏览器对象模型(BOM)

IE 3.0 和 Netscape Navigator 3.0 提供了一种特性 - BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作。使用 BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。使 BOM 独树一帜且又常常令人怀疑的地方在于,它只是 JavaScript 的一个部分,没有任何相关的标准。

BOM 主要处理浏览器窗口和框架,不过通常浏览器特定的 JavaScript 扩展都被看做 BOM 的一部分。这些扩展包括:

  • 弹出新的浏览器窗口
  • 移动、关闭浏览器窗口以及调整窗口大小
  • 提供 Web 浏览器详细信息的定位对象
  • 提供用户屏幕分辨率详细信息的屏幕对象
  • 对 cookie 的支持
  • IE 扩展了 BOM,加入了 ActiveXObject 类,可以通过 JavaScript 实例化 ActiveX 对象

2. Javascript的历史

目前所有的主流 Web 浏览器都支持 ECMA-262 第三版,即JavaScript 1.5版本,JavaScript 1.6-1.9只是ECMAScript (JavaScript on Gecko)升级至JavaScript 2.0的临时代号。从图中你会发现没有ECMAScript 4th。这是因为在ECMAScript 4th标准的制定过程中,由于关于语言的复杂性出现分歧,第4版本被放弃,其中的部分成为了第5版本及Harmony的基础。

3. Javascript的未来

大家都知道JavaScript这门语言在设计上有些地方存在缺陷,比如只有函数级作用域没有块级作用域,比如this绑定的问题,比如一直都让我很困惑的constructor等等。作为一门脚本语言,JavaScript又非常之灵活,你可以随意指定对象实例而不必定义类,大规模程序开发过程中,这一点其实也相当痛苦:难以快速重构和寻找调用点。

其实在我看来JavaScript发展趋势大概有这么两种:

1.  改良,也就是下一代的ES 6,代号Harmony2.  被取代,比如非常流行的CoffeeScript,谷歌主导的Dart,还有微软的TypeScript

3.1 ECMAScript 6

在2007年,浏览器市场巨头(Mozilla、Microsoft、Adobe、Google和Opera)之间合作和联合的氛围逐渐瓦解,设计师们提出了一份ES4提案,即ECMAScript标准的第4个版本。这将是JavaScript历史上最重大的标准升级,它为JavaScript引入了一些重要的新功能,例如基于类的继承、名称空间以及迭代器。但是各个厂商关于标准的实现方面出现了严重的分歧,采用该新标准的厂商并不多,因此该标准难以成为一个切实可行的技术标准。

在一个无法使用的标准制定过程中投入太多的精力并没有什么意义,因此第二个工作组随之形成。该工作组首先由Microsoft和Yahoo!组成,他们并行地提出了一个更加现代的ECMAScript标准的修订版,解决了一些迫切的而又不容易引起争论的需求。这个新的标准就是ES3.1(即ECMAScript 3.1版),随后更名为ES5。

ES5的初衷是成为ES4所定义的标准和ES3中已经实现的标准之间的中间版本。ES5曾经被更多地描述为某种程序错误修正的版本,而不是一个主要的标准升级版本。这两个工作组试图协调各自的努力,以便将ES3.1中的改变推进到ES4中。由于在基本主张上存在差异,两个标准之间的共同点实在太少,很显然这种协调难以取得成功。新标准的制定工作再次陷入停顿状态。然而,Adobe公司在最新的Flash引擎和Flex开发(ActionScript 3)中已经采用了ES4标准。但就目前的状况而言,ES4似乎已经看不到什么未来。最后,两个工作组不得不求同存异而走到一起,以便双方都可以将标准推向前进。人们将这个新的、完全不同的项目称为“ECMAScript Harmony”,它几乎没有保留源自ES4标准的内容。

Harmony是ES6的代号。

您可以在MDN上查看,另外可以在官方的WIKI上面浏览。

目前已知在ES6中将会有的几个新东西:

  • module
  • Object.observe()
  • 默认参数值
  • 块级作用域
  • Map
  • Set
  • WeakMap
  • 代理
  • 一些新的API,比如Object.is,Array.from等

博客园的紫云飞同学有翻译了这么一篇博文:,你不妨阅读下以了解更多信息。

3.2 CoffeeScript

官方主页:

CoffeeScript 是一种新的编程语言,构建于 JavaScript 之上。CoffeeScript 提供了一种简洁的语法,对 Python 或 Ruby 开发人员极具吸引力。它还提供了许多函数式编程特性,灵感来自于诸如 Haskell 和 Lisp 这类语言。CoffeeScript 可编译成高效 JavaScript,除了可在 Web 浏览器中运行 JavaScript,您还可以将它与诸如 Node.js 一类的技术相结合用于构建服务器应用程序。

在IBM的developerWorks网站上有这么一个入门系列文章介绍CoffeeScript:

3.3 Google Dart

官方主页: Dart是一款面向对象的基于类概念的编程语言,其最核心的特性:

  • 基于类
  • 可选类型(支持 dynamic/static typing)
  • 丰富内置库
  • 开发工具丰富

我只是浅尝则止的看了下Dart,有点是MINI JAVA的感觉。GOOGLE发布,这边有一篇,你可以阅读这个版本快速上手Dart。不过话说我个人觉得面向对象确实是能很方便支持PITL,也就是programming-in-the-large,大规模编程,但我个人已经非常习惯了JS那一套灵活的动态特性,函数式特性,这种javascript-like的面向对象语言,一开始真心感觉别扭。

3.4 TypeScript

官方主页:

微软出品的一款完全基于并且完全兼容JavaScript语法的语言,按照微软官方提供的TypeScript文档上的介绍来说,TypeScript就是Javascript语言的语法糖。TypeScript提供了以下的特性:

  • 支持静态类型
  • 基于类的面向对象编程
  • 提供了基于vs的编辑器插件(微软系开发者的福音,不过VS实在太重了,好在也有提供SublimeText的插件)
  • 支持node.js?(在官方站点看到可以使用npm安装,我想应该是支持的。本人没有试用过TypeScript,求验证)

相比Dart而言,TypeScript本身提供的功能较少、较弱;其他功能由第三方js库提供,根据项目需要,可能要引入多个第三方js库。不过优点相对也是非常明显的,TypeScript的Js兼容性不错。

3.5 其他

在整理这篇博文的过程中,浏览到传说中上帝的玩偶:这个语言,详细的没有了解过,不过貌似这个语言能够夸语言,使用haxe编写的代码能够被翻译成为其他语言,比如haXe -> C++,haXe -> JS ,haXe -> as3/swf,haXe -> php。

这个语言感觉比较冷,而且是由开源社区推动发展的,另外,中文的文档相对也比较少,英语文档似乎也不丰富的样子,实际使用的话估计会碰到不少钉子。

[参考文档]

转载于:https://my.oschina.net/knightuniverse/blog/135102

你可能感兴趣的文章
C博客作业--指针
查看>>
版本12.2.0.1.0数据库,复制种子数据库快速创建租户数据库PDB
查看>>
mysql for Mac 下创建数据表中文显示为?的解决方法
查看>>
Glibc 和 uClibc
查看>>
VMware 虚拟机的虚拟磁盘编程知识点扫盲之二
查看>>
vs2012中自带IIS如何让其他电脑访问
查看>>
关于termux在手机上搭载Linux系统,python,ssh
查看>>
Redux:异步操作
查看>>
Mysql学习第三课-分析二进制日志进行增量备份和还原
查看>>
2-11
查看>>
POJ1961 Period [KMP应用]
查看>>
如何在 Android 手机上安装 Ubuntu 13.04
查看>>
HDU 6073 - Matching In Multiplication | 2017 Multi-University Training Contest 4
查看>>
C语言 scanf()和gets()函数的区别
查看>>
如何检测域名是否被微信屏蔽 微信域名检测接口API是如何实现
查看>>
POJ1611-The Suspects
查看>>
Linux下安装Python-3.3.2【转】
查看>>
LeetCode OJ:Merge Two Sorted Lists(合并两个链表)
查看>>
功能测试
查看>>
【BZOJ 1901】Dynamic Rankings
查看>>