简介

本章介绍 JavaScript 并讨论其一些基本概念。

你应该已经知道的内容

本指南假定你具备以下基础知识

  • 对互联网和万维网 (WWW) 有大致了解。
  • 熟练掌握超文本标记语言 (HTML)。
  • 一些编程经验。如果你是编程新手,请尝试 JavaScript 主页上链接的其中一个教程。

在哪里可以找到 JavaScript 信息

MDN 上的 JavaScript 文档包括以下内容

什么是 JavaScript?

JavaScript 是一种跨平台、面向对象的脚本语言,用于使网页具有交互性(例如,复杂的动画、可点击的按钮、弹出菜单等)。还有更高级的服务器端 JavaScript 版本,例如 Node.js,它允许你为网站添加比下载文件更多的功能(例如多个计算机之间的实时协作)。在宿主环境(例如,Web 浏览器)中,JavaScript 可以连接到其环境的对象,以提供对它们的程序化控制。

JavaScript 包含一个标准的对象库,例如 ArrayMapMath,以及一组核心语言元素,例如运算符、控制结构和语句。核心 JavaScript 可以通过补充额外的对象来扩展,以用于各种目的;例如

  • 客户端 JavaScript 通过提供控制浏览器及其文档对象模型(DOM)的对象来扩展核心语言。例如,客户端扩展允许应用程序将元素放置在 HTML 表单上,并响应用户事件,例如鼠标点击、表单输入和页面导航。
  • 服务器端 JavaScript 通过提供与在服务器上运行 JavaScript 相关的对象来扩展核心语言。例如,服务器端扩展允许应用程序与数据库通信,提供从应用程序的一个调用到另一个调用的信息连续性,或在服务器上执行文件操作。

这意味着在浏览器中,JavaScript 可以改变网页(DOM)的外观。同样,服务器上的 Node.js JavaScript 可以响应浏览器中执行的代码发送的自定义请求。

JavaScript 和 Java

JavaScript 和 Java 在某些方面相似,但在另一些方面则根本不同。JavaScript 语言类似于 Java,但没有 Java 的静态类型和强类型检查。JavaScript 遵循大多数 Java 表达式语法、命名约定和基本控制流结构,这就是它从 LiveScript 更名为 JavaScript 的原因。

与 Java 的声明构建的编译时类系统不同,JavaScript 支持一个基于少数代表数字、布尔和字符串值的数据类型的运行时系统。JavaScript 具有基于原型的对象模型,而不是更常见的基于类的对象模型。基于原型的模型提供动态继承;也就是说,继承的内容可以因单个对象而异。JavaScript 还支持不需要任何特殊声明要求的函数。函数可以是对象的属性,作为松散类型的方法执行。

与 Java 相比,JavaScript 是一种非常自由的语言。你无需声明所有变量、类和方法。你无需担心方法是公共的、私有的还是受保护的,也无需实现接口。变量、参数和函数返回类型没有明确的类型。

Java 是一种基于类的编程语言,旨在实现快速执行和类型安全。类型安全意味着,例如,你不能将 Java 整数转换为对象引用,也不能通过破坏 Java 字节码来访问私有内存。Java 的基于类的模型意味着程序完全由类及其方法组成。Java 的类继承和强类型通常需要紧密耦合的对象层次结构。这些要求使 Java 编程比 JavaScript 编程更复杂。

相比之下,JavaScript 的精神源自一系列较小、动态类型的语言,例如 HyperTalk 和 dBase。这些脚本语言因其更简单的语法、专门的内置功能和对对象创建的最低要求,为更广泛的受众提供了编程工具。

JavaScript Java
面向对象。对象类型之间没有区别。继承通过原型机制实现,属性和方法可以动态添加到任何对象。 基于类。对象分为类和实例,所有继承都通过类层次结构进行。类和实例不能动态添加属性或方法。
变量数据类型不声明(动态类型,松散类型)。 变量数据类型必须声明(静态类型,强类型)。
不能自动写入硬盘。 可以自动写入硬盘。

JavaScript 和 ECMAScript 规范

JavaScript 由 Ecma International(欧洲信息和通信系统标准化协会,ECMA 曾是欧洲计算机制造商协会的缩写)标准化,旨在提供基于 JavaScript 的标准化国际编程语言。这个标准化版本的 JavaScript 称为 ECMAScript,在所有支持该标准的应用程序中行为相同。公司可以使用开放标准语言来开发其 JavaScript 实现。ECMAScript 标准记录在 ECMA-262 规范中。

ECMA-262 标准也获得 ISO(国际标准化组织)批准,作为 ISO-16262。你也可以在 Ecma International 网站上找到该规范。ECMAScript 规范不描述文档对象模型(DOM),DOM 由 万维网联盟 (W3C) 和/或 WHATWG (Web 超文本应用技术工作组) 标准化。DOM 定义了 HTML 文档对象向你的脚本公开的方式。要更好地了解使用 JavaScript 编程时使用的不同技术,请参阅文章 JavaScript 技术概述

JavaScript 文档与 ECMAScript 规范

ECMAScript 规范是一组实现 ECMAScript 的要求。如果你想在 ECMAScript 实现或引擎中(例如 Firefox 中的 SpiderMonkey 或 Chrome 中的 V8)实现符合标准的语言特性,它会很有用。

ECMAScript 文档旨在帮助脚本程序员。编写脚本时请使用 JavaScript 文档获取信息。

ECMAScript 规范使用 JavaScript 程序员可能不熟悉的术语和语法。尽管语言的描述在 ECMAScript 中可能有所不同,但语言本身保持不变。JavaScript 支持 ECMAScript 规范中概述的所有功能。

JavaScript 文档描述了适合 JavaScript 程序员的语言方面。

JavaScript 入门

要开始使用 JavaScript,你只需要一个现代的 Web 浏览器。最新版本的 FirefoxChromeMicrosoft EdgeSafari 都支持本指南中讨论的功能。

一个非常有用的 JavaScript 探索工具是 JavaScript 控制台(有时称为 Web 控制台,或简称控制台):这是一个允许你输入 JavaScript 并在当前页面中运行它的工具。

这里的屏幕截图显示了 Firefox Web 控制台,但所有现代浏览器都附带了一个以类似方式工作的控制台。

打开控制台

打开控制台的确切说明因浏览器而异

输入并运行 JavaScript

控制台显示在浏览器窗口的底部。控制台底部有一个输入行,你可以用来输入 JavaScript,输出显示在上面的面板中

A browser window with the web console open at the bottom, containing two lines of input and output. Text can be entered below that.

控制台的工作方式与 eval 完全相同:返回最后输入的表达式。为简单起见,可以想象每次在控制台中输入内容时,它实际上都被 console.log 包裹在 eval 周围,就像这样

js
console.log(eval("3 + 5"));

控制台中的多行输入

默认情况下,如果你在输入一行代码后按 Enter(或 Return,取决于你的键盘),则你键入的字符串将被执行。要输入多行输入

  • 如果你键入的字符串不完整(例如,你键入 function foo() {),则控制台会将 Enter 视为换行符,并允许你键入另一行。
  • 如果你在按 Enter 的同时按住 Shift,则控制台会将其视为换行符,并允许你键入另一行。
  • 仅在 Firefox 中,你可以激活多行输入模式,你可以在迷你编辑器中输入多行,然后在准备好时运行整个代码。

要开始编写 JavaScript,请打开控制台,复制以下代码,并将其粘贴到提示符处

js
(function () {
  "use strict";
  /* Start of your code */
  function greetMe(yourName) {
    alert(`Hello ${yourName}`);
  }

  greetMe("World");
  /* End of your code */
})();

Enter 即可在浏览器中查看其展开!

接下来是什么

在接下来的页面中,本指南将向你介绍 JavaScript 语法和语言功能,以便你能够编写更复杂的应用程序。

但现在,请记住始终在代码前包含 (function(){"use strict";,并在代码末尾添加 })();严格模式IIFE 文章解释了它们的作用,但现在可以认为它们的作用如下

  1. 防止 JavaScript 中让初学者感到困惑的语义。
  2. 防止在控制台中执行的代码片段相互交互(例如,在一次控制台执行中创建的内容被用于另一次控制台执行)。