每日一课:JavaScript的深度解析

发表时间: 2019-10-26 23:38

1.1 JavaScript简介

让我们看看JavaScript有什么特别之处,我们可以用它实现什么,以及哪些其他技术可以很好地使用它。

什么是JavaScript?

最初创建JavaScript是为了“使网页变得生动”。用这种语言编写的程序称为脚本。它们可以直接写在网页的HTML中,并在页面加载时自动运行。

提供脚本并将其作为纯文本执行。他们不需要特殊的准备或编译即可运行。在这方面,JavaScript与另一种称为Java的语言有很大不同。

为什么叫JavaScript?

创建JavaScript时,它最初具有另一个名称:“ LiveScript”。但是Java在当时非常流行,因此决定将一种新语言定位为Java的“弟弟”会有所帮助。

但是随着它的发展,JavaScript成为一种完全独立的语言,具有自己的称为ECMAScript的规范,现在它与Java完全无关。

如今,JavaScript不仅可以在浏览器中执行,而且可以在服务器上执行,或者实际上可以在具有称为JavaScript引擎的特殊程序的任何设备上执行。

浏览器具有嵌入式引擎,有时称为“ JavaScript虚拟机”。

不同的引擎具有不同的“代号”。例如:

  • V8 –在Chrome和Opera中。
  • SpiderMonkey –在Firefox中。
  • …还有其他代号,例如用于不同版本的IE的“ Trident”和“ Chakra”,用于Microsoft Edge的“ ChakraCore”,用于Safari的“ Nitro”和“ SquirrelFish”等。

上面的术语很容易记住,因为它们在Internet上的开发人员文章中使用。我们也会使用它们。例如,如果“ V8支持某项功能X”,则该功能可能会在Chrome和Opera中运行。

引擎如何运作?

引擎很复杂。但是基础很简单。

1. 引擎(如果是浏览器,则嵌入)读取(“解析”)脚本。

2. 然后,它将脚本转换(“编译”)为机器语言。

3. 然后,机器代码运行得非常快。

引擎在流程的每个步骤都应用优化。它甚至在运行时监视已编译的脚本,分析流过该脚本的数据,并根据该知识对机器代码进行优化。完成后,脚本运行速度非常快。

浏览器内JavaScript可以做什么?

现代JavaScript是一种“安全”的编程语言。它不提供对内存或CPU的低级访问,因为它最初是为不需要它的浏览器创建的。

JavaScript的功能很大程度上取决于其运行的环境。例如,Node.js支持允许JavaScript读取/写入任意文件,执行网络请求等功能。

浏览器内JavaScript可以完成与网页操作,与用户和Web服务器的交互有关的所有事情。

例如,浏览器中的JavaScript能够:

  • 将新的HTML添加到页面,更改现有内容,修改样式。
  • 对用户操作做出反应,通过单击鼠标,指针移动和按键来运行。
  • 通过网络将请求发送到远程服务器,下载和上传文件(所谓的AJAX和COMET技术)。
  • 获取并设置Cookie,向访问者提问,显示消息。
  • 记住客户端上的数据(“本地存储”)。

浏览器内的JavaScript无法做什么?

为了用户的安全,限制了浏览器中JavaScript的功能。目的是防止恶意网页访问私人信息或损害用户数据。

此类限制的示例包括:

  • 网页上的JavaScript可能无法读写硬盘上的任意文件,将它们复制或执行程序。它不能直接访问OS系统功能。现代浏览器允许它处理文件,但是访问受到限制,并且只有在用户执行某些操作(例如将文件“拖放”到浏览器窗口或通过<input>标记选择)时才提供访问权限。有多种与相机/麦克风和其他设备进行交互的方法,但是它们需要用户的明确许可。因此,启用JavaScript的页面可能无法立即启用网络摄像头,观察周围环境并将信息发送给NSA。
  • 不同的选项卡/窗口通常互不了解。有时它们会这样做,例如,当一个窗口使用JavaScript打开另一个窗口时。但是即使在这种情况下,如果一个页面中的JavaScript来自不同的站点(来自不同的域,协议或端口),它们也可能无法访问另一页面。这称为“相同来源政策”。要解决此问题,两个页面必须同意进行数据交换,并包含处理它的特殊JavaScript代码。同样,此限制是出于用户安全的考虑。用户打开的来自http://example.com的页面不能访问URL为http://gmail.com的其他浏览器选项卡,并不能从那里窃取信息。
  • JavaScript可以轻松地通过网络与当前页面所来自的服务器进行通信。但是它从其他站点/域接收数据的能力被削弱了。尽管可能,但需要明确的协议(以HTTP标头表示)

如果在浏览器外部(例如在服务器上)使用JavaScript,则不存在此类限制。现代浏览器还允许插件/扩展,可能要求扩展权限。

是什么使JavaScript独特?

关于JavaScript至少有三件事:

1. 与HTML / CSS完全集成。2. 简单的事情简单地完成。3. 所有主要浏览器均支持并默认启用。

JavaScript是将这三件事结合在一起的唯一浏览器技术。

这就是使JavaScript独特的原因。这就是为什么它是用于创建浏览器界面的最广泛的工具。

也就是说,JavaScript还允许创建服务器,移动应用程序等。

JavaScript上的语言

JavaScript的语法并不适合所有人的需求。不同的人想要不同的功能。

这是可以预料的,因为每个人的项目和要求都不同。

因此,最近出现了许多新语言,这些新语言在浏览器中运行之前已被编译(转换)为JavaScript。

现代工具使转换非常快速和透明,实际上使开发人员可以使用另一种语言进行编码并“在幕后”对其进行自动转换。

此类语言的示例:

  • CoffeeScript是JavaScript的“语法糖”。它引入了较短的语法,使我们可以编写更清晰,更精确的代码。通常,Ruby开发人员喜欢它。
  • TypeScript专注于添加“严格数据类型”以简化复杂系统的开发和支持。它是由Microsoft开发的。
  • Flow还以不同的方式添加了数据类型。由Facebook开发。
  • Dart是一种独立的语言,具有自己的引擎,该引擎可以在非浏览器环境(例如移动应用程序)中运行,但也可以转换为JavaScript。由Google开发。

还有更多。当然,即使我们使用一种编译语言,我们也应该了解JavaScript才能真正了解我们在做什么。

摘要

  • JavaScript最初是作为一种仅用于浏览器的语言创建的,但现在也已在许多其他环境中使用。
  • 如今,JavaScript已成为与HTML / CSS完全集成的最广泛使用的浏览器语言。
  • 有许多语言可以“转换”为JavaScript并提供某些功能。建议在精通JavaScript之后至少对它们进行一下浏览。