简介

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

您应该已经了解的内容

本指南假设您具备以下基本背景

  • 对互联网和万维网 (WWW) 的一般了解。
  • 良好的超文本标记语言 (HTML) 工作知识。
  • 一些编程经验。如果您是编程新手,请尝试主页上链接的关于 JavaScript 的教程之一。

在哪里查找 JavaScript 信息

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

如果您是 JavaScript 新手,请从 学习区域JavaScript 指南 中的文章开始。一旦您牢牢掌握了基础知识,就可以使用 JavaScript 参考 获取有关各个对象和语句的更多详细信息。

什么是 JavaScript?

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

JavaScript 包含一个标准对象库,例如 ArrayDateMath,以及一组核心语言元素,例如运算符、控制结构和语句。可以通过补充其他对象来扩展核心 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 国际网站 上找到规范。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完全相同:返回输入的最后一个表达式。为简单起见,可以想象每次在控制台中输入内容时,实际上都围绕eval使用了console.log,如下所示

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. 防止在控制台中执行的代码片段相互交互(例如,在一个控制台执行中创建的内容被用于不同的控制台执行)。