2022 年 8 月 8 日

JavaScript 简介

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

什么是 JavaScript?

JavaScript 最初是为了“让网页变得生动”而创建的。

这种语言中的程序称为脚本。它们可以直接写在网页的 HTML 中,并在页面加载时自动运行。

脚本以纯文本形式提供并执行。它们不需要特殊的准备或编译即可运行。

在这方面,JavaScript 与另一种名为 Java 的语言有很大不同。

为什么它被称为JavaScript?

JavaScript 在创建之初,最初的名称是“LiveScript”。但当时 Java 非常流行,因此决定将新语言定位为 Java 的“小兄弟”将会很有帮助。

但随着发展,JavaScript 变成了一门完全独立的语言,拥有自己的规范,称为 ECMAScript,现在它与 Java 完全没有关系了。

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

浏览器有一个内置引擎,有时称为“JavaScript 虚拟机”。

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

  • V8 – 在 Chrome、Opera 和 Edge 中。
  • SpiderMonkey – 在 Firefox 中。
  • …还有其他代号,如 IE 的“Chakra”、“JavaScriptCore”、“Nitro”和 Safari 的“SquirrelFish”等。

记住以上术语很重要,因为它们在互联网上的开发者文章中会用到。我们也会使用它们。例如,如果“V8 支持功能 X”,那么它可能在 Chrome、Opera 和 Edge 中运行。

引擎如何工作?

引擎很复杂。但基础知识很容易。

  1. 引擎(如果是浏览器则嵌入)读取(“解析”)脚本。
  2. 然后它将脚本转换为(“编译”)机器代码。
  3. 然后机器代码运行,非常快。

引擎在进程的每个步骤中应用优化。它甚至在运行时监视已编译的脚本,分析流经它的数据,并根据该知识进一步优化机器代码。

浏览器内 JavaScript 能做什么?

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

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

浏览器内 JavaScript 可以执行与网页操作、与用户交互以及 Web 服务器相关的所有操作。

例如,浏览器内 JavaScript 能够

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

浏览器内 JavaScript 无法做什么?

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

此类限制的示例包括

  • 网页上的 JavaScript 可能无法读取/写入硬盘上的任意文件、复制文件或执行程序。它无法直接访问操作系统功能。

    现代浏览器允许它使用文件,但访问受到限制,并且仅在用户执行某些操作(例如将文件“拖放”到浏览器窗口或通过 <input> 标记选择文件)时才提供。

    有办法与摄像头/麦克风和其他设备进行交互,但它们需要用户的明确许可。因此,启用了 JavaScript 的页面可能无法偷偷启用网络摄像头,观察周围环境并将信息发送给 NSA

  • 不同的选项卡/窗口通常不知道彼此。有时它们知道,例如当一个窗口使用 JavaScript 打开另一个窗口时。但即使在这种情况下,如果 JavaScript 来自不同的站点(来自不同的域、协议或端口),来自一个页面的 JavaScript 也无法访问另一个页面。

    这称为“同源策略”。为了解决这个问题,两个页面必须同意交换数据,并且必须包含处理它的特殊 JavaScript 代码。我们将在教程中介绍这一点。

    此限制同样是为了用户的安全。例如,用户打开的来自 http://anysite.com 的页面不能访问具有 URL http://gmail.com 的另一个浏览器选项卡,并从中窃取信息。

  • JavaScript 可以轻松地通过网络与当前页面所在的服务器进行通信。但它从其他网站/域接收数据的能力受到限制。虽然有可能,但需要远程方的明确同意(在 HTTP 标头中表示)。同样,这也是一个安全限制。

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

是什么让 JavaScript 独一无二?

JavaScript 至少有三个优点

  • 与 HTML/CSS 完全集成。
  • 简单的事情简单地完成。
  • 所有主流浏览器都支持并默认启用。

JavaScript 是唯一将这三者结合起来的浏览器技术。

这正是 JavaScript 的独特之处。这就是它成为创建浏览器界面最广泛使用的工具的原因。

也就是说,JavaScript 可用于创建服务器、移动应用程序等。

“超越” JavaScript 的语言

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

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

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

现代工具使转译非常快速且透明,实际上允许开发人员使用另一种语言进行编码,并自动在“后台”进行转换。

此类语言的示例

  • CoffeeScript 是 JavaScript 的“语法糖”。它引入了更简洁的语法,使我们能够编写更清晰、更精确的代码。通常,Ruby 开发人员喜欢它。
  • TypeScript 专注于添加“严格数据类型”,以简化复杂系统的开发和支持。它由 Microsoft 开发。
  • Flow 也添加了数据类型,但方式不同。由 Facebook 开发。
  • Dart 是一种独立语言,它有自己的引擎,可以在非浏览器环境(如移动应用程序)中运行,但也可以转译为 JavaScript。由 Google 开发。
  • Brython 是一个 Python 转译器,可以将应用程序编写成纯 Python,而无需 JavaScript。
  • Kotlin 是一种现代、简洁且安全的编程语言,可以针对浏览器或 Node。

还有更多。当然,即使我们使用其中一种已转换语言,我们也应该了解 JavaScript,才能真正理解我们在做什么。

摘要

  • JavaScript 最初创建为仅限浏览器的语言,但现在也在许多其他环境中使用。
  • 如今,JavaScript 作为最广泛采用的浏览器语言,与 HTML/CSS 完全集成,拥有独特的地位。
  • 有许多语言可以“转换”为 JavaScript 并提供某些功能。建议在精通 JavaScript 后至少简单了解一下这些语言。
教程地图

评论

在评论前先阅读此内容...
  • 如果您有改进建议,请提交 GitHub 问题或提交拉取请求,而不是发表评论。
  • 如果您无法理解文章中的内容,请详细说明。
  • 要插入几行代码,请使用 <code> 标签,对于多行代码,请将其包装在 <pre> 标签中,对于超过 10 行的代码,请使用沙盒 (plnkrjsbincodepen…)