一、什么是JavaScript?
JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。
JavaScript与Java在名字或语法上都有很多相似性,但这两门编程语言从设计之初就有很大的不同,JavaScript的语言设计主要受到了Self(一种基于原型的编程语言)和Scheme(一门函数式编程语言)的影响。在语法结构上它又与C语言有很多相似(例如if条件语句、switch语句、while循环、do-while循环等)。
在客户端,JavaScript在传统意义上被实现为一种解释语言,但在最近,它已经可以被即时编译(JIT)执行。随着最新的HTML5和CSS3语言标准的推行它还可用于游戏、桌面和移动应用程序的开发和在服务器端网络环境运行,如Node.js
二、Javascript 之父(Brendan Eich)
-
布兰登·艾克生于美国加州的森尼维尔市,在圣塔克拉拉大学(Santa Clara University)就读时,最初主修物理学,大三时因兴趣转变转投计算机科学领域,后获取数学与计算机科学学士学位。1986年获取伊利诺伊大学香槟分校计算机科学硕士学位
-
毕业后进入SGI工作,在此工作七年,主要负责操作系统,后他在MicroUnity工作了三年
-
1995年4月,任职于网景期间,为网景浏览器开发出JavaScript,之后成为网页浏览器领域应用最广泛的脚本语言之一
-
1998年,艾克协助成立Mozilla.org,2003年在美国在线决定结束网景部门营运后,艾克协助成立了Mozilla基金会
-
2014年3月24日,艾克晋升为Mozilla公司首席执行官引发同性恋族群抗议,归咎于艾克2008年曾捐助1000美元支持加利福尼亚州8号提案。此事引发在线交友网站OkCupid抵制使用Firefox浏览器,一些Mozilla员工亦要求辞职,但Mozilla董事会成员希望他留在公司中扮演不同的角色
-
2014年4月3日,艾克宣布从Mozilla离职。艾克在他的个人博客中写道:“Mozilla的使命远超过我们任何一人,无法胜任Mozilla的领导职位”
-
2015年5月28日,艾克成立Brave软件公司,这是一家互联网安全公司,已经从天使投资者募集了250万美元的早期资金。该公司的联合创始人Brian Bondy曾在Mozilla和可汗学院工作。
-
2016年1月20日,该公司发布了Brave网页浏览器。
-
2017年5月,Brave用30秒完成了约3千5百万美元的ICO发售
三、JavaScript的历史
-
1993年,国家超级电脑应用中心(NCSA)发表了NCSA Mosaic,这是最早流行的图形接口网页浏览器,它在万维网的普及上发挥了重要作用
-
1994年,Mosaic的主要开发人员随即创立了Netscape公司,并雇用了许多原来的NCSA Mosaic开发者用来开发Netscape Navigator,该公司的目标是取代NCSA Mosaic成为世界第一的网页浏览器。在四个月内,已经占据了四分之三的浏览器市场,并成为1990年代互联网的主要浏览器。网景预见到网络需要变得更动态。公司的创始人马克·安德森认为HTML需要一种胶水语言,让网页设计师和兼职程序员可以很容易地使用它来组装图片和插件之类的组件,且代码可以直接编写在网页标记中
-
1995年,网景招募了布兰登·艾克,目标是把Scheme语言嵌入到Netscape Navigator浏览器当中。但更早之前,网景已经跟昇阳合作在Netscape Navigator中支持Java,这时网景内部产生激烈的争论。后来网景决定发明一种与Java搭配使用的辅助脚本语言并且语法上有些类似,这个决策导致排除了采用现有的语言,例如Perl、Python、Tcl或Scheme。为了在其他竞争提案中捍卫JavaScript这个想法,公司需要有一个可以运作的原型。艾克在1995年5月仅花了十天时间就把原型设计出来
-
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具有非常丰富的特性
四、ECMAScript标准
-
1997年6月,第一版ECMAScript发布
-
1999年12月,第三版ECMAScript发布,这也是应用最广泛的ECMAScript版本
-
第四版流产
-
第三版发布后,经过了10年,2009年12月第五版ECMAScript才发布,(为这段时间IE 6浏览器正如日中天)
-
hrome的崛起,这些新的浏览器的JS引擎都根据ECMAScript标准进行实现。所以除了IE,其他浏览器与浏览器之间的兼容性得到大大提高
-
15年6月,ECMAScript第六版(ES6)发布。并在之后每一年都发布一版。可见JS地位在不断提高
-
vaScript与ECMAScript的区别在于,ECMAScript是标准,JavaScript是实现(实际上JavaScript是由ECMAScript,DOM和BOM三者组成的),实现的功能不一定会出现在标准里面,不同的浏览器也有自己独特的JS实现。 (先有实现再考虑要不要把这个实现加入标准)
五、Javascript的10个设计缺陷
-
不适合开发大型程序 Javascript没有名称空间(namespace),很难模块化;没有如何将代码分布在多个文件的规范;允许同名函数的重复定义,后面的定义可以覆盖前面的定义,很不利于模块化加载
-
非常小的标准库 Javascript提供的标准函数库非常小,只能完成一些基本操作,很多功能都不具备
-
null和undefined null属于对象(object)的一种,意思是该对象为空;undefined则是一种数据类型,表示未定义;者非常容易混淆,但是含义完全不同;编程实践中,null几乎没用,根本不应该设计它
-
全局变量难以控制 Javascript的全局变量,在所有模块中都是可见的;任何一个函数内部都可以生成全局变量,这大大加剧了程序的复杂性
-
自动插入行尾分号 Javascript的所有语句,都必须以分号结尾。但是,如果你忘记加分号,解释器并不报错,而是为你自动加上分号。有时候,这会导致一些难以发现的错误
-
加号运算符 +号作为运算符,有两个含义,可以表示数字与数字的和,也可以表示字符与字符的连接。如果一个操作项是字符,另一个操作项是数字,则数字自动转化为字符。这样的设计,不必要地加剧了运算的复杂性,完全可以另行设置一个字符连接的运算符
-
NaN NaN是一种数字,表示超出了解释器的极限
-
数组和对象的区分 由于Javascript的数组也属于对象(object),所以要区分一个对象到底是不是数组,相当麻烦
-
== 和 === ==用来判断两个值是否相等。当两个值类型不同时,会发生自动转换,得到的结果非常不符合直觉。因此,推荐任何时候都使用"==="(精确判断)比较符。
-
基本类型的包装对象 Javascript有三种基本数据类型:字符串、数字和布尔值。它们都有相应的建构函数,可以生成字符串对象、数字对象和布尔值对象。与基本数据类型对应的对象类型,作用很小,造成的混淆却很大。
详细文章在这里[阮一峰的网络日志ifeng.com/blog/2011/06/10_design_defects_in_javascript.html)
六、概论
一般来说,完整的JavaScript包括以下几个部分:
JavaScript的基本特点如下:
-
是一种解释性脚本语言(代码不进行预编译)
-
主要用来向HTML页面添加交互行为
-
可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离
JavaScript常用来完成以下任务:
-
嵌入动态文本于HTML页面
-
对浏览器事件作出响应
-
读写HTML元素
-
在数据被提交到服务器之前验证数据
-
检测访客的浏览器信息
-
控制cookie,包括创建和修改等