JavaScript简介
JavaScript(缩写为JS)是一门基于原型和头等函数的多范式高级解释型编程语言,它支持面向对象程序设计、指令式编程和函数式编程。它提供方法来操控文本、数组、日期以及正则表达式等。不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。它由Ecma通过ECMAScript实现语言的标准化。目前,它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、Firefox、Safari和Opera)所支持。
JavaScript与Java在名字和语法上都很相似,但这两门编程语言从设计之初就有很大不同。JavaScript在语言设计上主要受到了Self(一种基于原型的编程语言)和Scheme(一门函数式编程语言)的影响,在语法结构上它和C语言很相似(如if条件语句、switch语句、while循环和do-while循环等)。对于客户端来说,JavaScript通常被实现为一门解释语言,但如今它已经可以被即时编译(JIT)。随着HTML5和CSS3语言标准的推行,它还可以用于游戏、桌面和移动应用程序的开发,以及在服务器端网络环境运行(如Node.js)。
基本信息
编程范型:事件驱动、函数式、指令式
设计者:布兰登·艾克及ECMAScript规范的其他关键贡献者
发行时间:1995年12月4日
类型系统:动态类型、鸭子类型
文件扩展名:.js、.cjs、.mjs
官方网站:https://www.ecma-international.org/publications-and-standards/standards/ecma-262
历史
始于网景
1993年,美国国家超级计算机应用中心(NCSA)发表了NCSA Mosaic,这是最早流行的图形接口网页浏览器,它在万维网的普及上发挥了重要作用。1994年,Mosaic的主要开发人员创立了Netscape公司,并雇用了许多原来的NCSA Mosaic开发者用来开发Netscape Navigator,该公司的目标是取代NCSA Mosaic成为世界第一的网页浏览器。在四个月内,已经占据了四分之三的浏览器市场,并成为1990年代互联网的主要浏览器。
在网络发展的这些年,网页只能是静态的,缺乏在浏览器中加载网页后的动态行为能力。公司的创始人马克·安德森认为HTML需要一种胶水语言,让网页设计师和兼职程序员可以很容易地使用它来组装图片和插件之类的组件,且代码可以直接编写在网页标记中。1995年,网景招募了布兰登·艾克,目标是把Scheme语言嵌入到Netscape Navigator浏览器中。但更早之前,网景已经跟昇阳合作,计划在Netscape Navigator中嵌入Java语言,这时网景内部产生激烈的争论,网景公司管理层很快决定,最佳的方案是由艾克设计一种新的语言,其语法类似于Java,而不像Scheme或其他现存的脚本语言。为了在其他竞争提案中捍卫JavaScript这个想法,公司需要有一个可以运作的原型。艾克在1995年5月仅花了十天时间就把原型设计出来了。最初命名为Mocha,1995年9月在Netscape Navigator 2.0的Beta版中改名为LiveScript,同年12月,Netscape Navigator 2.0 Beta 3中部署时被重命名为JavaScript。当时网景公司与昇阳电脑公司组成的开发联盟为了让这门语言搭上Java这个编程语言“热词”,因此将其临时改名为JavaScript,日后这成为大众对这门语言有诸多误解的原因之一。
微软采纳
微软公司于1995年首次推出Internet Explorer,引发了与Netscape的浏览器大战。微软对Netscape Navigator解释器进行了逆向工程,创建了JScript,以与处于市场领导地位的网景产品同台竞争。JScript也是一种JavaScript实现,这两个JavaScript语言版本在浏览器端共存意味着语言标准化的缺失。发展初期,JavaScript的标准并未确定,同期就有网景的JavaScript和微软的JScript。除此之外,微软也在网页技术上加入了不少专属对象,使不少网页使用非微软平台及浏览器无法正常显示。这导致在浏览器大战期间网页设计者通常会把“用Netscape可达到最佳效果”或“用IE可达到最佳效果”的标志放在主页。
标准化与增长
1996年11月,网景正式向ECMA(欧洲计算机制造商协会)提交语言标准。1997年6月,ECMA以JavaScript语言为基础制定了ECMAScript标准规范ECMA-262。JavaScript成为了ECMAScript最著名的实现之一。除此之外,ActionScript和JScript也都是ECMAScript规范的实现语言。尽管JavaScript作为给非程序人员的脚本语言,而非作为给程序人员的编程语言来推广和宣传,但是JavaScript具有非常丰富的特性。
在21世纪初Internet Explorer占主导地位期间,客户端脚本停滞不前。这在2004年开始改变,当时Netscape的继任者Mozilla发布了Firefox浏览器。Firefox受到许多人的好评,从Internet Explorer获得了巨大的市场份额。2005年,Mozilla加入了ECMA International,并开始研究ECMAScript for XML(E4X)标准。这导致Mozilla与Macromedia(后来被Adobe Systems收购)合作,他们正在用基于ECMAScript 4草案的ActionScript 3语言实现E4X。目标是将ActionScript 3标准化为新的ECMAScript 4。为此,Adobe Systems将Tamarin实现作为开源项目发布。然而,Tamarin和ActionScript 3与既定的客户端脚本太不同,如果没有微软的合作,ECMAScript 4从未获取成果。与此同时,与ECMA工作无关的开源社区正在发生非常重要的发展。2005年,Jesse James Garrett发布了一份白皮书,其中他创造了Ajax一词,并描述了一套技术,其中JavaScript是骨干,用于创建可以在后台加载数据的Web应用程序,避免了重新加载整页的需要。这引发了JavaScript的复兴时期,由开源库和围绕它们形成的社区带头。创建了许多新库,包括jQuery、Prototype、Dojo Toolkit和MooTools。
谷歌于2008年首次推出Chrome浏览器,其V8 JavaScript引擎比竞争对手更快。关键的创新是及时编译(JIT),因此其他浏览器供应商需要为JIT彻底改革他们的引擎。
2008年7月,这些不同的团体聚集在一起,在奥斯陆举行会议。这导致在2009年初达成了最终协议,将所有相关工作结合起来,推动语言向前发展。使得2009年12月发布了ECMAScript 5标准。
走向成熟
关于该语言雄心勃勃的工作持续了数年,最终随着 2015 年ECMAScript 6的发布而正式形成了广泛的补充和改进。Ryan Dahl在 2009 年创建的Node.js引发了 Web 浏览器之外 JavaScript 使用的显着增加。Node 结合了V8引擎、事件循环和I/O API,从而提供了独立的 JavaScript 运行时系统。截至 2018 年,Node 已被数百万开发人员使用,并且npm拥有世界上所有包管理器中最多的模块。
ECMAScript 草案规范目前在GitHub上公开维护,并通过定期的年度快照生成版本。对语言的潜在修订通过全面的提案流程进行审查。
当前的 JavaScript 生态系统拥有许多库和框架、已建立的编程实践以及在 Web 浏览器之外大量使用 JavaScript。另外,随着单页应用程序和其他大量使用 JavaScript 的网站的兴起,已经创建了多个转译器来帮助开发过程。
版本历史
注:JavaScript最初开发于1996年,被使用于Netscape Navigator网页浏览器。同年微软在Internet Explorer发布了一个实现。由于商标问题,这项实现被命名为JScript。1997年,JavaScript已经被网景公司提交给ECMA制定为标准,称之为ECMAScript,标准编号ECMA-262。使用显式版本号声明对语言的引用,作为一项Mozilla的特性,已在较新版本中被移除(至少为Firefox 59)。Firefox 4是最后一个需要显式地在引用时声明明确版本号的版本(1.8.5)。
语言特性
完整的JavaScript包括:
●ECMAScript: 描述了该语言的语法和基本对象
●文档对象模型(DOM): 描述处理网页内容的方法和接口
●浏览器对象模型(BOM): 描述与浏览器进行交互的方法和接口
JavaScript的基本特点如下:
●是一种解释性脚本语言(代码不进行预编译)
●主要用来向HTML页面添加交互行为
●可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离
JavaScript常用来完成以下任务:
●嵌入动态文本于HTML页面
●对浏览器事件作出响应
●读写HTML元素
●在数据被提交到服务器之前验证数据
●检测访客的浏览器信息
●控制Cookie,包括创建和修改等
不同于服务器端脚本语言(如PHP和ASP),JavaScript主要被作为客户端脚本语言在用户的浏览器上运行,不需要服务器的支持。所以在早期程序员比较青睐于JavaScript以减少对服务器的负担,而与此同时在安全性上出现了问题。随着服务器变得强大,现在的程序员更喜欢运行于服务端的脚本以保证安全,但JavaScript仍然以其跨平台、容易上手等优势大行其道。同时,有些特殊功能(如AJAX)必须依赖JavaScript在客户端提供支持。随着引擎(如V8)和框架(如Node.js)的发展,以及事件驱动和异步IO等特性,JavaScript也被逐渐用来编写服务器端程序。
简单示例
在游览器上输出Hello World。
1 | <!DOCTYPE HTML> |
版权声明
Scholar’s Blog by scholargeek is licensed under a Creative Commons BY-NC-ND 4.0 International License.
由董仕麟创作并维护的scholargeek博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于Scholar’s Blog博客,版权所有,侵权必究。