JavaScript起源、发展历史及设计的缺陷

         1.1 起源

1.2 简史

1.3 内容

1.4 设计缺陷

1.1 起源

        JavaScript诞生于1995年,它的出现主要是用于处理网页中的前端验证。

        所谓的前端验证,就是指检查用户输入的内容是否符合一定的规则。比如:用户名的长度,密码的长度,邮箱的格式等。

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

1.2 简史

        JavaScript是由网景(Netscape)公司发明,起初命名为LiveScript,后来由于SUN公司的介入更名为JavaScript。

        1996年微软公司在其最新的IE3浏览器中引入了自己对JavaScript的实现JScript。

        于是在市面上存在两个版本的JavaScript,分别是网景公司的JavaScript和微软的JScript。

        为了确保不同的浏览器上运行的JavaScript标准一致,所以几个公司共同制定了JS的标准命名为ECMAScript。

        1995年,Brendan·Eich(布兰登·艾克,JS之父)进入网景公司,在公司“看上去与Java足够相似,但是比Java简单,使得非专业的网页作者也能很快上手”的要求下,用10天确定了设计思路并为其浏览器开发了JS功能,以下为设计思路:

(1)借鉴C语言的基本语法;

(2)借鉴Java语言的数据类型和内存管理;

(3)借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;

(4)借鉴Self语言,使用基于原型(prototype)的继承机制。

        值得一提的是,Brendan本人并不喜欢自己的这个作品,虽然当时很多人都十分喜欢Java语言,但Brendan却不是其中一员,因此即使JavaScript在后来成为互联网第一大语言,全世界有几百万学习者,但Brendan仍然不喜这个以Java为设计原型的作品,他将其称为“C语言和Self语言一夜情的产物”。

1.3 内容

         一般来说,完整的JavaScript包括以下几个部分:

        ECMAScript,描述了该语言的语法和基本对象(ECMAScript是纸上标准,JavaScript是浏览器的实现,纸上标准一般落后于浏览器);

        文档对象模型(DOM,描述处理网页内容的方法和接口;

        浏览器对象模型(BOM,描述与浏览器进行交互的方法和接口。

        (1)JavaScript被设计出来后最初命名为Mocha,1995年9月在Netscape Navigator 2.0的Beta版中改名为LiveScript,同年12月,Netscape Navigator 2.0 Beta 3中部署时被重命名为JavaScript;

        (2)1996年8月IE 3发布,支持JScript(微软实现的JS);

        (3)1996年11月,网景向ECMA提交语言标准,由于版权问题,JS语言标准不叫JavaScript,叫 ECMAScript;

        (4)1997年6月,第一版ECMAScript发布;

        (5)1999年12月,第三版ECMAScript发布,这个版本使用最广(第四版没有发行成功)

        (6)2006年,jQuery 发布,它是目前最长寿的JS库;

        (7)2009年12月,第五版ECMAScript发布,增加了一些功能;

        (8)2009年,Ryan 基于V8(Chrome的JS引擎叫做V8)创建了Node.js

        (9)2010年,Isaac基于node.js写出了npm;

        (10)2015年6月,第六版ECMAScript发布,新浏览器都支持这一版(之后每年发布一版,版本号以年份命名)。

        (11)2016年,yarn发布,极大地弥补了npm的缺陷。

        JavaScript是一门解释型语言,所谓解释型语言不需要被编译为机器码执行,而是直接执行。但是由于少了编译这一步骤,所以解释型语言开发起来尤为轻松,但是解释型语言运行较慢也是它的劣势。不过解释型语言中使用了JIT技术,使得运行速度得以改善。

        JavaScript是一门动态语言,所谓的动态语言可以暂时理解为在语言中的一切内容都是不确定的。比如一个变量,这一时刻是个整型,下一时刻可能会变成字符串了。

        动态语言相比静态语言性能上要差一些,不过由于JavaScript中应用的JIT技术,所以JS可能是运行速度最快的动态语言了。

1.4 设计缺陷

        由于JavaScript的设计阶段过于仓促,而且它结合了函数式编程和面向对象编程的特点,是历史上的第一例,没有先例可以参考。同时JavaScript在推出一年半之后,国际标准就问世了,过早的标准化使JavaScript的规格还没来及调整就固化了,因此导致了JavaScript的设计不够完善,有很多失误。

        如果遵守良好的编程规范,加上第三方函数库的帮助,JavaScript的缺陷大部分可以回避,JavaScript目前是网页编程的唯一语言,会跟随着互联网不断发展,同时只要发布新版本的语言标准,就可以弥补这些设计缺陷。

        以下为列举的10个缺陷:

        (1)不适合开发大型程序

        JavaScript没有名称空间(namespace),很难模块化;没有如何将代码分布在多个文件的规范;允许同名函数的重复定义,后面的定义可以覆盖前面的定义,很不利于模块化加载。目前已经引入模块化的开发方式。

        (2)非常小的标准库

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

        (3)null和undefined易混淆,但是含义完全不同

        null属于对象(object)的一种,意思是该对象为空;undefined则是一种数据类型,表示未定义。在编程实践中,null几乎没用。

        (4)全局变量难以控制

        JavaScript的全局变量,在所有模块中都是可见的;任何一个函数内部都可以生成全局变量,这大大加剧了程序的复杂性。目前基本使用const和let声明变量。

        (5)自动插入行尾分号

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

目前开发项目时,均已经规定了代码书写的规范,必须遵循代码风格。

        (6)加号运算符

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

        (7)无需设计NaN

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

        (8)数组和对象的区分

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

        (9)== 和 ===

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

        (10)基本类型的包装对象

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值