你好,JavaScript!
现在是时候开始学习JavaScript了。在本章中,我们将会介绍这门语言,同样也会建立起一个编程环境。我们同样会编写我们最初的JavaScript程序。
下面是本章要涉及到的内容:
- 如何编程
- JavaScript的历史
- 使用JavaScript编程所需的工具
- 控制台中的JavaScript
- Web浏览器中的JavaScript
- 另一个更加复杂的JavaScript程序
如何编程
编程就是让计算机做你想让它做的事情。一个计算机程序基本上是一系列告诉你的计算机如何执行一个任务的指令。不幸的是,计算机和我们说的语言不一样,它们只使用1和0。最初的计算机是使用打孔卡来编程的,用打一个洞表示1,用不打洞来表示0。机器码和汇编代码是与计算机硬件密切相关的低层语言。用它们来编程是十分困难的事,因为它们牵涉到写与计算机体系结构紧密联系的十分抽象的代码。
除此之外,高层编程语言使得我们能够使用像函数和逻辑语句这样的抽象,让人类能够更容易地读和写这些代码。用C、C++、Java编写的程序是先编译成机器码再执行的。这些程序通常非常快并且经常用在速度至关重要的场合,像写游戏和专业的商业软件。
在运行时被翻译成机器码的解释过的高层语言经常被称为脚本语言。一般情况下,它们比编译型语言执行得要慢,不过解释器正在变得越来先进,使得编译型语言和解释型语言之间的界限越来越模糊。
JavaScript
在这本书中我们将要学习的语言叫做JavaScript,经常被称为万维网之语言。几乎所有的Web浏览器可以运行JavaScript,使得它成为世界上最流行的编程语言之一。它只有很小的进入门槛——你用于使用JavaScript编程的全部只是一款文本编辑器和一个网页浏览器。虽然很容易上手,JavaScript也可以是一门难以使用的复杂语言,由于它有一些独一无二的特性和有趣的怪癖。一旦你掌握了它,你就会发现这是一种能够建造强大应用程序的非常灵活、有表现力的语言。
JavaScript是一种在运行时编译的高级语言。这意味着它需要一个负责解释和运行它们的引擎。最常见的JavaScript引擎可以在Firefox、Chrome、Internet Explorer中找得到,不过JavaScript也能够不用浏览器运行。很多现代的JavaScript引擎使用一种即时解释(Just-in-time, JIT)的过程,这能够大幅增加编译过程的速度,使得程序运行得更快。
JavaScript也是一种动态语言,这意味着构成程序的元素能够在运行的过程中发生变化。
JavaScript的历史
万维网(World Wide Web,WWW)最初是由一些以超链接(hyperlink)相互连接的页面组成。很快地人们想要更多的交互,因此,网景公司(Netscape,一家早期的浏览器厂商),请求Brendan Eich给他们的Navigator浏览器开发一种新的语言。由于网景和微软之间争第一的激烈竞争,这项任务需要很快完成。于是Eich设法在十天之内创建出了一个语言原型。为了做到这一点,他向其他语言借鉴了各种不同的元素,包括AWK,Java,Perl,Scheme,HyperTalk和Self。这门新的语言最初被称为LiveScript,不过它匆匆地就被重新命名为JavaScript,从而它能够从Sun微系统的Java语言吸引的公共关注中受益。这个名字经常不巧地致人困惑,即JavaScript经常被认为是Java的一个轻量级版本。这两门语言实际上是没有关系的,虽然JavaScript确实与Java有一些相同的语法。
1995年,JavaScript在Netscape的Navigator浏览器的第二版上演了它的处女秀。次年,微软对JavaScript进行了反向工程,以创建他们自己的版本。它被称为JScript以避免与拥有Java商标的Sun微系统之间的版权问题,并且微软把它授权给NetScape。JScript附带于IE浏览器的第三个版本上。它几乎和JavaScript一样——甚至连相同的缺陷和怪癖都包含了进去,不过确实有一些IE独家的额外特性。与此同时,微软将另一个叫作VBScript的脚本语言包含在IE浏览器中,尽管它从来没真正地流行起来。
JavaScript(和JScript)立刻就受到了欢迎。它的使用门槛很低,也相对容易学习。这导致了它使用的爆炸性增加,使得网页变得动态、更加具有交互性。遗憾的是,它的低门槛同样也是个诅咒,因为它使得人们可以不用对他们实际的所作所为有太多的理解就能够写小代码段。代码能够很容易地被复制、粘贴,而它们常常被人们以不正确的方式来使用,导致网络上遍布很多很差的代码示例。JavaScript同样经常被用来创建恼人的弹窗广告,以及浏览器嗅探(检测用户用哪一个浏览器浏览网页的过程),随后它开始招致不好的名声。
网景和Sun微系统公司决定在欧洲计算机制造商协会(European Computer Manufacturers Association,ECMA)的协助下对这门语言进行标准化,也即将要主持这个标准的机构。这门经标准化的语言被称作ECMAScript,照旧是为了避免侵犯Sun的Java商标。这引致了人们更大的困惑,不过最终ECMAScript被用来指代规范,而JavaScript被用来(现在仍然是)指语言自身。
ECMAScript标准在某些地方解释起来很困难,因此JavaScript的实现在各种各样的JavaScript引擎中可能会有所不同。这就是为什么有些Web浏览器在运行JavaScript程序的时候表现出来的行为会不一样。
浏览器战争
到Netscape Navigator 4 和Internet Explorer 4发布之时,JavaScript已经变得极其流行了。微软已经开始对动态HTML,或者简称为DHTML一词的炒作。为了紧紧抓住这波流行,网景和微软设法增加新的专有特性,导致了不同语法的使用。这场以增加新特性相较量的军备竞赛以浏览器战争而闻名。这场军备竞赛令人遗憾的消极面是,为了在两种浏览器中得到相同的结果,程序员必须写出两种不同的版本。专业的程序员经常对JavaScript不屑一顾,认为它仅仅是一种玩具语言,不适合于任何严肃的编程。但是这是不公平的评判。语言本身不是问题,问题在于语言被实现和使用的方式。
最终,微软在浏览器战争中取得了胜利,IE也占据了浏览器的主导地位。对标准的支持同样也增加了,极大程度上靠互联网标准计划(Web Standards Project, WaSP)的支持。开发者和浏览器厂商开始一起工作,开始接受万维网联盟(W3C)和ECMA制订的标准。
开源浏览器火狐(FireFox)在2002年首次亮相,2003年苹果发行了他们的Safari浏览器。他们都有很强的标准支持,这意味着开发者能够利用JavaScript创造出在更佳的不同浏览器上表现一致的网页应用。
Web 2.0
2005年,像谷歌地图、Flickr和Gmail这样的网站
开始出现,并且证明了JavaScript能够创建外观和行为和原生桌面应用一样的丰富的因特网应用。大约同一时期,术语Ajax(异步JavaScript和XML的简写)由Jesse James Garrett创建出来。它描述了一种在后台从服务端获取数据,不需要重载整个网页,只更新网页的有关部分的一种技术。这种技术使得用户仍然能够和页面余下的部分交互。这为用户创建了更加无缝的浏览体验,于是JavaScript开始被看作是一门强大而灵活得编程语言,拥有着产生高质量代码的能力。
标准
随着JavaScript语言正为更加复杂的应用和浏览器能够接受的标准所用,JavaScript版图发生了变化。一场新的浏览器大战开始了。但这时是有关哪一款浏览器能够成为最与标准兼容的那一个。与此同时,提高集成在不同浏览器引擎中的速度的竞赛正在上演。这场竞赛是从2008年谷歌的工程师开发在Chrome浏览器内部运行的V8引擎。它的速度比前一代的JavaScript引擎有大幅度提高,这同时标志着另一场军备竞赛,其他的厂商纷纷以提高他们自己的JavaScript引擎做出了回应。JavaScript现在在浏览器当中运行的速度有了飞跃式的提升并且前进的步伐没有显示出任何停下来的迹象。
HTML5
HTML5是最新的HTML规范,尽管它更像是一个所有在万维网上运用的最新技术的统称。这包括了CSS3模块,以及许许多多的利用JavaScript与网页交互的API。这些将会在第十章中有更详细的阐述。
事实证明HTML5十分流行,并且逐渐显现出在web开发中的主导地位。JavaScript是它的一些更有趣方面运行时起到关键作用的特性。
Node.js
2009年,Ryan Dahl开发了Node.js,它让使用JavaScript编写服务端应用程序成为可能。它基于Google的V8引擎,并且在事件驱动的环境中,它实现了非阻塞的输入/输出模型,这使得人们可以仅用JavaScript就构建出快速而强大的实时Web应用。这也致使很多根本不使用浏览器的应用和JavaScript库的出现。事实证明Node JS出人意料地受到欢迎,并且它的使用持续增长,这使得人们对JavaScript的兴趣和运用不断增加,与此相伴的是你能在很多种场合都能发现JavaScript的身影。
Node.js的流行引致一个有趣现象的产生,它被称作“同构JavaScript”,这牵涉到同样的JavaScript代码既可以在客户端运行也可以在服务端运行,如果一个浏览器不能运行这些代码,它们同样可以在服务器上运行或者被下载下来,或者服务器不能运行这些代码,它们可以在客户端运行。
JavaScript的未来
除了仅仅使网页具有交互性以外,对于JavaScript来说,在制作越来越多应用的过程中出现了一些激动人心的时刻。目前成长最明显的领域是单页面应用(Single Page Application, SPA)。这些应用在浏览器中运行,并且很大程度上依赖于JavaScript。大量使用JavaScript的HTML5游戏正在变得越来越流行,尤其是浏览器的图形功能一直在被改善。
JavaScript和HTML5技术可以用来开发浏览器扩展、Windows8 桌面小部件,火狐OS和ChromeOS的应用。很多与web无关的应用同样使用JavaScript作为它们的脚本语言。JavaScript可以被用来向PDF文档增加交互功能,创建HTML模板(Mustache),与数据库交互(MongoDB),甚至控制机器人(Cylon.js)!
很明显JavaScript有很光明的前途,在web平台持续成熟与演进和JavaScript的使用不仅仅局限于浏览器之时,JavaScript无疑能够在未来的开发过程中保持着中心的地位。
一名忍者需要的编程环境
一命忍者不需要太多东西就可以拿JavaScript进行编程了。所有它需要的东西仅仅是一个文本编辑器和一个web浏览器,诸如Firefox、Opera、Internet Explorer、Safari,或者是Chrome。
JavaScript的版本
在本书中我们将使用ECMAScript的第五版,并且假定你正在使用一款现代的浏览器(不管你喜欢哪款浏览器都可以,设法把它更新到最新的版本)。不过不能指望用户总是使用最新的版本,所以我们试着指出在较旧的浏览器中某些代码不能工作之处。
文本编辑器
如果你使用Windows的话,记事本就很好了。如果你觉得它太过简单,你也许会想要尝试Notepad++,E TextEditor,UltraEdit,或者是Sublime Text。
如果你在使用一台Mac,供选择的有内置的TextEdit,Text Wrangler, TextMate, 或者Atom text editor。你也可以使用Sublime Text。
如果你使用Linux的话,你也不会对这些内置的文本编辑器介意:诸如Gedit, Genie, Kate, Vim,或者是Emacs,你也可以使用E Text Editor 或者是Sublime Text
你也可以考虑使用一个集成开发环境(IDE),比如说Eclipse, Coda, NetBeans, 或者在线的Cloud 9。
浏览器控制台
几乎每个浏览器都可以运行JavaScript并且最新的浏览器提供了一个能够运行JavaScript代码片段的控制台。下面是一些关于如何在一些最流行的浏览器的JavaScript控制台中运行JavaScript代码的指南:
Chrome
菜单 > 更多工具 > 开发者工具,或者按Command + Option + J (Mac下),或Ctrl +
Shift + J
Safari
按 **Command +Option + I
IE浏览器
按F12打开开发者工具,点击控制台标签。