饥人谷技术博客

JavaScript的诞生与发展

2021-01-17  本文已影响0人  茜Akane

JavaScript发展历史

JavaScript(通常缩写为JS)是一种解释性脚本语言(代码不进行预编译),主要用来向HTML页面添加交互行为。它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。

一 JavaScript的起源

JavaScript因为互联网而生,紧随着浏览器的出现而问世。回顾它的历史,就要从浏览器的历史讲起。
下面就简单回顾这段辉煌的历史:

Netscape公司很快发现,Navigator浏览器需要一种可以嵌入网页的脚本语言,用来控制浏览器行为(表单验证)。管理层对这种浏览器脚本语言的设想是:功能不需要太强,语法较为简单,容易学习和部署。
那一年,正逢Sun公司的Java语言问世,市场推广活动非常成功。Netscape公司决定与Sun公司合作,浏览器支持嵌入Java小程序(后来称为Java applet)。
但是,浏览器脚本语言是否就选用Java,则存在争论。后来,还是决定不使用Java,因为网页小程序不需要Java这么“重”的语法。但是,同时也决定脚本语言的语法要接近Java,并且可以支持Java程序。这些设想直接排除了使用现存语言,比如Perl、Python和TCL。

Brendan Eich有很强的函数式编程背景,希望以Scheme语言(函数式语言鼻祖LISP语言的一种方言)为蓝本,实现这种新语言。

基本语法:借鉴C语言和Java语言。
数据结构:借鉴Java语言,包括将值分成原始值和对象两>大类。
函数的用法:借鉴Scheme语言和Awk语言,将函数当作第一等公民,并引入闭包。
原型继承模型:借鉴Self语言(Smalltalk的一种变种)。
正则表达式:借鉴Perl语言。
字符串和数组处理:借鉴Python语言。

二 JavaScript的发展

由于JavaScript的设计阶段过于仓促,而且它结合了函数式编程和面向对象编程的特点,是历史上的第一例,没有先例可以参考,同时Javascript在推出一年半之后,国际标准就问世了,过早的标准化使Javascript的规格还没来及调整就固化了,因此导致了Javascript的设计不够完善,有很多失误。
如果遵守良好的编程规范,加上第三方函数库的帮助,Javascript的缺陷大部分可以回避,Javascript目前是网页编程的唯一语言,会跟随着互联网不断发展,同时只要发布新版本的语言标准,就可以弥补这些设计缺陷。

以下为列举的10个缺陷:
(1)不适合开发大型程序
Javascript没有名称空间(namespace),很难模块化;没有如何将代码分布在多个文件的规范;允许同名函数的重复定义,后面的定义可以覆盖前面的定义,很不利于模块化加载。

(2)非常小的标准库
Javascript提供的标准函数库非常小,只能完成一些基本操作,很多功能都不具备。

(3)null和undefined易混淆,但是含义完全不同
null属于对象(object)的一种,意思是该对象为空;undefined则是一种数据类型,表示未定义。在编程实践中,null几乎没用。

(4)全局变量难以控制
Javascript的全局变量,在所有模块中都是可见的;任何一个函数内部都可以生成全局变量,这大大加剧了程序的复杂性。

(5)自动插入行尾分号
Javascript的所有语句,都必须以分号结尾。但是,如果你忘记加分号,解释器并不报错,而是为你自动加上分号。有时候,这会导致一些难以发现的错误。

(6)加号运算符
+号作为运算符,有两个含义,可以表示数字与数字的和,也可以表示字符与字符的连接。这样的设计,不必要地加剧了运算的复杂性。

(7)无需设计NaN
NaN是一种数字,表示超出了解释器的极限,去掉NAN更有利于简化程序。

(8)数组和对象的区分
由于Javascript的数组也属于对象(object),所以要区分一个对象到底是不是数组,相当麻烦。

(9)== 和 ===
==用来判断两个值是否相等。当两个值类型不同时,会发生自动转换,得到的结果非常不符合直觉。因此,推荐任何时候都使用"==="(精确判断)比较符。

(10)基本类型的包装对象
Javascript有三种基本数据类型:字符串、数字和布尔值。它们都有相应的建构函数,可以生成字符串对象、数字对象和布尔值对象。与基本数据类型对应的对象类型,作用很小,造成的混淆却很大。

参考链接:http://www.ruanyifeng.com/blog/2011/06/10_design_defects_in_javascript.html
http://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html
https://zh.wikipedia.org/wiki/JavaScript

上一篇 下一篇

猜你喜欢

热点阅读