重学JavaScript系列——(一)什么是JavaScript

重学JavaScript系列——(一)什么是JavaScript

博主以扎实JavaScript基础为目的,以《JavaScript高级程序设计(第四版)》为核心参考资料,以一个“复习者”的角度有针对性地来创作这期专栏。文章加入了博主的很多思考和开发经验,关注初学JavaScript时容易忽略的地方,着重总结了ECMAScript新标准知识点的特性和应用场景。最终,本专栏将覆盖完整的JavaScript知识体系,以辅佐各路豪杰在开发路上的稳步前进。

专栏传送门:https://blog.csdn.net/huoyihengyuan/category_10586561.html


1995年,中国正式提出科教兴国战略,全面落实科学技术是第一生产力。

在地球的另一边,JavaScript问世。

1.1 JavaScript历史回顾

当今,大多数时候,我们注册一个网站账号时,会被要求密码包含大小写等特定格式,以增加密码安全性。如果我们输入了不符合要求的密码时,就会即时收到一个很友好的提示语:“密码需要包含大小写”供我们进行矫正。

但在过去,这种验证是要我们提交之后,等待服务器给出反馈结果,在当时的低网速环境下,每一次漫长的等待都考验着人们的耐心。

在这样的环境下,网景公司的Brendan Eich开发了一款脚本语言LiveScript,服务于网景公司的Netscape浏览器。当时Java被炒的火热,网景在临近发布LiveScript时临时改名为JavaScript,当然效果很成功。然而很快,微软也开发了一套JavaScript的实现,服务于IE浏览器,但为了避免许可纠纷,特意区别命名为JScript。(我们接下来分别称之为网景JS和微软JS)

于是业界便出现了这“真假美猴王”,孙悟空(网景JS)和六耳猕猴(微软JS)倒也不打架,各占一个山头,可这就难为了广大猴子猴孙,去不同的山头需要用不同的猴语,随着文明的发展,需要学习的猴语又越来越多。

后来,孙悟空向如来佛祖提交了自己的语言档案,希望统一猴届语言。后来如来佛祖组织了“第39技术委员会(TC39)”,并邀请了所有对统一猴语感兴趣的猴帮。

终于,在数个月之后,ECMA-262诞生了,也就是ECMAScript(发音为“ek-ma-script”)这个新脚本语言标准。后来,各家浏览器均以ECMAScript作为自己的JavaScript实现依据。

1.2 JavaScript实现

我们常常把ECMAScript当作JavaScript,但实际上JavaScript拥有更大的范畴。

完整的JavaScript包含三部分:

  • ECMAScript(核心)
  • DOM(文档对象模型)
  • BOM(浏览器对象模型)

1.2.1 ECMAScript

ECMAScript可以理解为一种标准,Web浏览器只是其中一种实现这套标准的宿主环境。宿主环境提供了最基本的标准的实现,同时也提供了与环境自身交互必须的拓展。

ECMAScript并没有实现输入输出,我们常在浏览器中运行的打印语句console.log(‘out’)就是Web浏览器的拓展功能。

除了Web浏览器,其他宿主环境还有服务器端JS平台Node.js和即将被淘汰的Adobe Flash。

如果不涉及浏览器的话,ECMA-262只定义了一些基本的层面:

  • 语法
  • 类型
  • 语句
  • 关键字
  • 保留字
  • 操作符
  • 全局对象

我们经常听到诸如ES3、ES5和ES2015等等的名词,这其实就是ECMAScript版本简称。ES1可以理解为标准的ECMAScript第一版,而真正标志ECMAScript作为一门真正的标准语言的时代来临的事件,是ES3的问世。它更新了字符串的处理、错误定义和数值输出,增加了对正则表达式的、新控制语句和try/catch异常处理的支持等等。

为什么没听到过大家讨论ES4?因为ES4的提案太过激进,几乎定义了一门新语言,包括了强类型变量等等,以至于最后被废掉了。

所以后来下一次的ECMAScript新版本就是ES5,于2009年发布,增加了JSON数据的解析和序列化、方便继承的方法、严格模式等等。

ECMA-262第六版,俗称ES6、ES2015或ES Harmony(和谐版),于2015年发布,包含了大概有史以来最重要的一批增强特性:类、模块、迭代器、生成器、箭头函数、期约、反射、代理和新数据类型。

ECMA-262第七版,称为ES7、ES2016,于2016年发布,进行了少量的语法层面增强,如Array.prototype.includes和指数操作符。

ECMA-262第八版,称为ES8、ES2017,于2017年发布,增加了async/await、ShareArrayBuffer、Atomics API以及Object.value()、Object.entries()、Object.getOwnPropertyDescriptors()和字符串填充方法,另外明确支持对象字面量最后的逗号(这个细节令人舒服,这个逗号一直都像一个讨厌的苍蝇一样,影响着我的coding操作,这下可以轻松愉快地copy代码了😊)。

ECMA-262第九版,称为ES9、ES2018,于2018年发布,修订包括异步迭代、剩余和拓展属性、Promise finally()等等。

ECMA-262第十版,称为ES10、ES2019,于2019年发布,增加了Array.prototype.flat()/flatMap()、String.prototype.trimStart()/trimEnd()、Object.fromEntries()、Symbol。prototype.description属性,明确定义了Function.prototype.toString()的返回值并固定了Array.prototype.sort()的顺序。

目前所有浏览器基本上对ES5提供了完善的支持,对ES6和ES7的支持也在不断提升,如果需要查看具体的兼容性表格,可以登录https://www.caniuse.com/。如果条件允许的话,期望开发者也能够与时俱进,不断尝试运用新功能,以完备的姿态去迎接未来,再不济也有babel方便让更多浏览器兼容我们的代码,难道不是吗?

1.2.2 DOM

文档对象模型(DOM,Document Object Model)是一个应用编程接口(API),用于在HTML中使用扩展的XML。

DOM将整个页面抽象成一组分层节点,创建出表示文档的树,让开发者可以随心所欲地控制页面的结构。

W3C制定了DOM规范,主要有两个模块构成:

  • DOM Core 提供了一种映射XML文档,方便访问和操作文档任意部分
  • DOM HTML 增加了特定于HTML的对象和方法

除了DOM Core和DOM HTML之外,有些其他语言也是基于XML的,下面的每一种都增加了该语言独有的DOM方法和接口:

  • 可伸缩矢量图(SVG,Scalable Vector Graphics)
  • 数学标记语言(MathML,Mathematical Markup Language)
  • 同步多媒体集成语言(SMIL,Synchronized Multimedia Integration Language)

1.2.3 BOM

浏览器对象模型(BOM,Browser Object Model)是用于支持访问和操作浏览器窗口的API。

通过BOM,开发者有能力操作页面之外的浏览器部分。总体来说,BOM主要针对于浏览器窗口和子窗口,不过人们通常会把任何特定于浏览器的扩展归在BOM的范畴内。以下就是这样的一些扩展:

  • 弹出新窗口的能力
  • 移动、缩放和关闭浏览器窗口的能力
  • navigator对象,提供浏览器的详细信息
  • location对象,提供浏览器加载页面的的详细信息
  • screen对象,提供关于用户屏幕分辨率的详细信息
  • performance对象,提供浏览器内存占用、导航行为和时间统计的详细信息
  • 对cookie的支持
  • 其他自定义对象,如XMLHttpRequset和IE的ActiveXObject

过去很长一段时间,每个浏览器实现的都是自己的BOM,现在有了HTML5,BOM的实现细节应该回日趋一致。

关于DOM和BOM的具体讲解,将在后续章节详细说明,这里就不再过多阐述。

小结

JavaScript是历史的产物,包含ECMAScript、DOM和BOM,它的产生铺垫了Web技术的蓬勃发展,尽管它只是一门用于和网页交互的脚本语言。

已经被越来越多的浏览器不断支持JavaScript的新特性,当然未来也会有更多的新方案被纳入标准。作为开发者的我们,需要做到与时俱进,在提升业务能力的同时,也不要忘记回顾这些核心技术和学习新特性。

你不可能永远年轻,但永远都有年轻人。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值