1,JavaScript前世今生
JavaScript历史
大概在1992年,一家称作Nombas的公司开始开发一种叫做C–(C-minus-minus,简称Cmm)的嵌入式脚本语言。 Cmm背后的理念很简单:一个足够强大可以替代宏操作(macro)的脚本语言,同时保持与C(和C++)中够的相似性,以便开发人员能很快学会。 这个脚本语言捆绑在一个叫做CEnvi的共享软件产品中,它首次向开发人员展示了这种语言的威力。 Nombas最终把Cmm的名字改成了ScripEase。原因是后面的部分(mm)听起来过于“消极”,同时字母C“令人害怕”。 现在ScriptEase已经成为了Nombas产品背后的主要驱动力。 当Netscape Navigator崭露头角时,Nombas开发了个可以嵌入网页中的CEnvi的版本。 这些早期的试验称为Espresso Page(浓咖啡般的页面),它们代表了每个在万维网上使用的客户端脚本语言。 而Nombas丝毫没有料到它的理念将会成为因特网的一块重要基石。
当网上冲浪越来越流行时,对于开发客户端脚本的需求也逐渐增大。此时,大部分因特网用户还仅仅通过28.8kbit/s的调制解调器来连接到网络,即便这时网页已经不断地变得更大和更复杂。而更加加剧用户痛苦的是,仅仅为了简单的表单有效性验证,就要与服务器端进行多次的往返交互。设想一下,用户填完一个表单,点击提交按钮,等待了30秒钟的处理后,看到的却是一条告诉你忘记填写一个必要的字段。那时正处于技术革新最前沿的Netscape,开始认真考虑一种开发客户端脚本语言来解决简单的处理问题。
当时工作于Netscape的Brendan Eich,开始着手为即将在1995年发行的Netscape Navigator 2.0开发一个称之为LiveScript的脚本语言,当时的目的是同时在浏览器和服务器(本来要叫它LiveWire的)端使用它。Netscape与Sun公司联手及时完成LiveScript实现。就在Netscape Navigator 2.0即将正式发布前,Netscape将其更名为JavaScript,目的是为了利用Java这个因特网时髦词汇。Netspace的赌注最终得到回报,JavaScript从此变成了因特网的必备组件。
因为JavaScript 1.0如此成功,Netscape在Netscape Navigator 3.0中发布了1.1版。恰巧那个时候,微软决定进军浏览器,发布了IE 3.0 并搭载了一个JavaScript的克隆版,叫做JScript(这样命名是为了避免与Netscape潜在的许可纠纷)。微软步入Web浏览器领域的这重要一步虽然令其声名狼藉,但也成为JavaScript语言发展过程中的重要一步。
在微软进入后,有3种不同的JavaScript版本同时存在:Netscape Navigator 3.0中的JavaScript、IE中的JScript以及CEnvi中的ScriptEase。与C和其他编程语言不同的是,JavaScript并没有一个标准来统一其语法或特性,而这3种不同的版本恰恰突出了这个问题。随着业界担心的增加,这个语言标准化显然已经势在必行。
1997年,JavaScript 1.1作为一个草案提交给欧洲计算机制造商协会(ECMA)。第39技术委员会(TC39)被委派来“标准化一个通用、跨平台、中立于厂商的脚本语言的语法和语义”(http://www.ecma-international.org/memento/TC39.htm)。由来自Netscape、Sun、微软、Borland和其他一些对脚本编程感兴趣的公司的程序员组成的TC39锤炼出了ECMA-262,该标准定义了叫做ECMAScript的全新脚本语言。
在接下来的几年里,国际标准化组织及国际电工委员会(ISO/IEC)也采纳ECMAScript作为标准(ISO/IEC-16262)。从此,Web浏览器就开始努力(虽然有着不同程度的成功和失败)将ECMAScript作为JavaScript实现的基础。
尽管ECMAScript是一个重要的标准,但它并不是JavaScript唯一的部分,当然,也不是唯一被标准化的部分。实际上,一个完整的JavaScript实现是由以下3个不同部分组成的
核心(ECMAScript)——JavaScript的核心ECMAScript描述了该语言的语法和基本对象
文档对象模型(DOM)——DOM描述了处理网页内容的方法和接口
浏览器对象模型(BOM)——BOM描述了与浏览器进行交互的方法和接口
ECMAScript、DOM、BOM将是我们之后课程的主要内容。
JavaScript与Java
尽管名字中有Java,但是JavaScript和Java几乎没有什么共同点。Java是一种全功能的编程语言,是由Sun公司开发和推广的。Java是C和C++编程语言之后的又一种主流语言,程序员可以使用它创建完整的应用程序和控制消费电子设备。与其他语言不同,Java宣称具有跨平台兼容性;也就是说,程序员应该能够编写出可以在所有种类的机器上运行的Java程序,无论机器运行的是Windows、Mac OS X还是任何风格的UNIX。但实际上,Java不总是能够实现这个梦想,因为Sun和微软公司在这种语言的发展方向方面有很大的分歧。微软公司首先试图以自己的方式将Java集成到Windows中(Sun认为,这种方式使Java在Windows上以一种方式工作,而在其他机器上以另一种方式工作,从而破坏了Java的跨平台兼容性);随后,微软公司从Windows中完全去除了Sun的Java,而创建了自己的类Java语言:C#。经过两公司之间的一轮诉讼之后,Sun占据了上风,现在可以在Windows(或Linux)上安装Sun的最新Java版本(http://www.java.com/getjava/)。Mac OS X操作系统在安装时会附带Java。
JavaScript可以做什么
用JavaScript可以做许多事情,使网页更具交互性,给站点的用户提供更好、更令人兴奋的体验。JavaScript使你可以创建活跃的用户界面,当用户在页面间导航时向他们提供反馈。例如,你可能在一些站点上见过在鼠标指针停留时突出显示的按钮。这是用JavaScript实现的,使用了一种称为翻转器(rollover)的技术 可以使用JavaScript确保用户在表单中输入有效的信息,这可以节省你的业务时间和开支。如果表单需要进行计算,那么可以在用户机器上的JavaScript中完成,而不需要任何服务器端处理。你应该知道一种区分程序的方式:在用户机器上运行的程序称为客户端(client-side)程序;在服务器上运行的程序(包括后面要讨论的CGI)称为服务器端(server-side)程序。 可以使用JavaScript根据用户的操作即时创建定制的HTML页面。假设你正在运行一个旅行指南站点,用户点击夏威夷作为旅游目的地。你可以在一个新窗口中显示最新的夏威夷旅游指南。JavaScript可以控制浏览器,所以你可以打开新窗口、显示警告框以及在浏览器窗口的状态栏中显示定制的消息。JavaScript有一套日期和时间特性,可以生成时钟、日历和时间戳文档。 JavaScript还可以处理表单、设置cookie、即时构建HTML页面以及创建基于Web的应用程序。
JavaScript不能做什么
JavaScript是一种客户端(client-side)语言;也就是说,设计它的目的是在用户的机器上执行任务,而不是在服务器上。因此,JavaScript有一些固有的限制,这些限制主要出于安全原因:
1.JavaScript不允许读写客户机器上的文件。这是有好处的,因为你肯定不希望网页能够读取自己硬盘上的文件,或者能够将病毒写入硬盘,或者能够操作你计算机上的文件。唯一的例外是,JavaScript可以写到浏览器的cookie文件,但是也有一些限制
2.JavaScript不允许写服务器机器上的文件。尽管写服务器上的文件在许多方面是很方便的(比如存储页面点击数或用户填写的表单数据),但是JavaScript不允许这么做。相反,需要用服务器上的一个程序处理和存储这些数据。这个程序可以是用Perl或PHP等语言编写的CGI或Java程序。
3.JavaScript不能关闭不是由它自己打开的窗口。这是为了避免一个站点关闭其他任何站点的窗口,从而独占浏览器。
4.JavaScript不能从来自另一个服务器的已经打开的网页中读取信息。换句话说,网页不能读取已经打开的其他窗口中的信息,因此无法探察访问这个站点的冲浪者还在访问哪些其他站点。
Hello,JavaScriptWorld!
我们的第一个脚本:最经典的HelloWorld程序!
<script type="text/javascript">
document.write("<h2>Hello,JavaScriptWorld!</h2>");
</script>
- 1
- 2
- 3
开发环境
选择一个你喜欢的纯文本编辑器或IDE
NotePad++
VIM
UltraEdit
EditPlus
gEdit(Unix)
Emacs(Mac/Unix)
其它
至少一个符合W3C标准的浏览器(推荐火狐浏览器),和一些市场上流行的浏览器(IE)
FireFox 3.0+
Internet Explorer 6.0+ (由于IE具有多种不同的版本,还推荐安装IETester)
Google Chrome 1.0+
Opera 9.0+
Safari 3.0+
调试工具
FireFox下的FireBug,Venkman等
IE下的IE DeveloperToolbar,MS Script Debugger等(强烈不推荐MS Script Debugger,安装之后问题多)
Google Chrome 的JS控制台已经很强大了,Opera的错误控制台也可以,Opera蜻蜓和FireBug一样强大,Safari具有和Chrome一样的控制台
1,JavaScript前世今生的更多相关文章
- JavaScript前世今生
JavaScript前世今生,HelloWorld与开发环境 JavaScript历史 大概在1992年,一家称作Nombas的公司开始开发一种叫做C--(C-minus-minus,简称Cmm)的嵌 ...
- 走进javascript——它是什么?
javascript不是什么 如<把时间当作朋友>的作者所说,"有些时候,有些事物,从反面描述比从正面描述更为容易.如若先仔细说清楚这本书不是什么,之后,至于它究竟是什么,很可能 ...
- 前端之JavaScript(一)
一.JavaScript前世今生 它最初由Netscape的Brendan Eich设计.JavaScript是甲骨文公司的注册商标.Ecma国际以JavaScript为基础制定了ECMAScript ...
- js教程--从入门到精通 第一篇 js的前世今生以及js中基本数据类型和引入方式
1.Javascript前世今生 1.1.什么是Javascript Javascript运行于Javascript [解释器/引擎]中的解释性脚本语言 Javascript ...
- JavaScript的前世今生
和CSS一样,JavaScript在各浏览器下并非完全一致,它所带来的兼容性问题时常困扰着我们,以至于现在“能否处理流行浏览器的兼容性问题”成为了检验一个程序员是否合格的标准之一.了解JavaScri ...
- JavaScript 异步编程的前世今生(上)
前言 提到 JavaScript 异步编程,很多小伙伴都很迷茫,本人花费大约一周的业余时间来对 JS 异步做一个完整的总结,和各位同学共勉共进步! 目录 part1 基础部分 什么是异步 part2 ...
- JavaScript异步流程控制的前世今生
Javascript语言将任务的执行模式分成两种:同步(Synchronous)和异步(Asynchronous). 什么是同步编程 "同步模式"就是上一段的模式,后一个任务等待前 ...
- JavaScript - 异步的前世今生
在开始接触JavaScript的时候,书上有一句话我记忆深刻,JavaScript是一门单线程语言,不管从什么途径去获取这个消息,前端开发者都会记住,哦~~,JavaScript是一门单线程语言, ...
- 技术分享|JavaScript的前世今生
目录 一.什么是JavaScript 二.JavaScript的功能 三.JavaScript可以做什么 四.JavaScript框架 五.HTML,CSS和JavaScript 六.JavaScri ...
随机推荐
- Eclipse 启动报错 An internal error occurred during: "Initializing Java Tooling"
如图所示,我的Eclispe版本是Oxygen,启动的时候turnaround弹出这种错误. 多种情况会导致这种报错.通过[重置窗口布局],可解决大部分情况: 解决办法:点击菜单导航栏的Window ...
- 小程序页面跳转传参-this和that的区别-登录流程-下拉菜单-实现画布自适应各种手机尺寸
小程序页面跳转传参 根目录下的 app.json 文件 页面文件的路径.窗口表现.设置网络超时时间.设置多 tab { "pages": [ "pages/index/i ...
- 随手用python写一个下载jdk源码爬虫
最近在研读jdk源码,网上找了下资源,发现都不完整. 后来新发现了一个有完整源码的地方,主要包括了java,c,c++的东西,装逼需要,就想拿来玩玩.但是,找了好多种下载打开的方式,发现都不对.于是, ...
- 使用本地缓存快还是使用redis缓存好?
使用本地缓存快还是使用redis缓存好? Redis早已家喻户晓,其性能自不必多说. 但是总有些时候,我们想把性能再提升一点,想着redis是个远程服务,性能也许不够,于是想用本地缓存试试!想法是不错 ...
- springboot下载文件
例子 /** * 下载假期模板 */ @ResponseBody @RequestMapping(value = "/downloadDolidayTemplate.do") pu ...
- Python 高度定制化自己的线程类和进程类代码,获取启动进程或线程方法的结果(兼容Py2和Py3)
#encoding=utf-8 from threading import Thread from multiprocessing import Process import multiprocess ...
- Anaconda+MINGW+theano+keras安装
前言:这几天算是被这东西困扰的十分难受,博客园和csdn各种逛,找教程,大家说法不一,很多方法也不一定适用,有些方法有待进一步完善.这里我借鉴了许多大神们的方法,以及自己的一些心得,希望对你们有一些帮 ...
- 使用SAX解析xml文档
1.首先,在main方法中解析xml文档,具体代码如下: import org.w3c.dom.*; import javax.xml.parsers.DocumentBuilder; import ...
- mysql 开发进阶篇系列 7 锁问题(innodb锁争用情况及锁模式)
1 .获取innodb行锁争用情况 1.1 通过检查innodb_row_lock状态变量来分析系统上的行锁的争夺情况 SHOW STATUS LIKE 'innodb_row_lock%' 通过in ...
- 菜鸟系列docker——docker镜像上(3)
1. 镜像image 镜像和容器的关系就和安装包和程序的关系一样,有了镜像才可以启动容器,容器是镜像的一个运行实例. 1.1 镜像的结构 通过第二节仓库,可能很多看官已经查看到镜像是分层的,接下来将对 ...