跳转到内容

JavaScript/简介

来自维基教科书,开放的书籍,为开放的世界




JS 是一种实现国际标准 ECMAScript 的编程语言。它基于以下概念。

动态数据类型

JS 了解一些基本数据类型(数字、字符串、布尔值、BigInt、符号、未定义、空)以及数据类型对象的各种衍生物(数组、日期、错误、函数、正则表达式)。[1] [2] 如果变量存在,它的类型定义明确。但类型可以在任何时候通过将不同类型的变量赋值给变量来更改,例如:代码片段let x; x = 'Some text'; x = 2; x = [10, 11, 12];是完全正确的。它不会创建编译时或运行时错误。只有变量x的类型从未定义变为字符串,再变为数字,最后变为对象/数组

(注意:JSON 是一种基于文本的数据格式,而不是数据类型。因此,它是语言无关的。它使用 JavaScript 对象语法。)

函数式编程

函数是类似于变量的一等公民。它们可以被赋值给变量,作为参数传递给其他函数,或者从函数中返回。代码片段function sayHello() {return 'Good morning'};let x = sayHello; console.log(x());创建了一个函数sayHello,将其赋值给变量x,并通过调用x()执行它。

面向对象编程

JS 通过原型支持面向对象编程和继承。原型是一个可以克隆和扩展的对象。这样做会产生一个原型链。这与其他面向对象语言(如 Java)不同,Java 使用来实现面向对象特性,例如继承。然而,在语法层面上,JS 中可以使用。但这只是“语法糖”。在幕后,JS 使用原型机制。

C 语言风格语法

JS 语法与 C、Java 或 C 系列的其他成员非常相似。但我们必须始终考虑到概念和运行时行为有明显区别。

与 Java 的关系

除了具有 C 语言风格语法外,JS 与 Java 没有任何关系。为了避免可能的混淆,我们想清楚地强调 JS 和 Java 之间的一些区别。

最初,Netscape 开发了 JavaScript,而Sun Microsystems 开发了 Java。Java 包括类和对象实例,而 JavaScript 使用原型。在 Java 中,变量必须在使用之前声明,这在 JS 中是不必要的(但不推荐)。

在 Java 中,变量具有不可变的静态类型(例如intString),在运行程序的整个生命周期中保持不变。在 JS 中,它们也有类型(例如NumberString),但这种类型可以在运行程序的生命周期中发生变化。类型是从环境中检测到的。因此,显式定义类型既没有必要也不可能。

int x = 0;          // Java: 'name of type', 'name of variable', ...
let x = 0;          // JS: 'let' or 'const', 'name of variable', ... 
                    //     The type will be 'Number' because of the right side of the equal sign.
let x = String (0); // JS: explicit change from 'Number' to 'String' BEFORE assignment to x
                    //     The type will be 'String'. Test it with: alert(typeof x)

JS 引擎

JS 可以运行在客户端,也可以运行在服务器端。JS 的早期版本在充当简单解释器的浏览器中运行。如今,该语言由即时编译器(JIT)处理。它们解析脚本,创建抽象语法树(AST),优化树,从 AST 生成特定于 JIT 的字节码,从字节码生成特定于硬件的机器代码,并将机器代码投入执行。此类即时编译器不仅存在于浏览器中。它们也可以是其他应用程序的一部分,例如:主要用 C++ 编写的node.js

广泛使用的 JS 引擎是

  • V8 来自 Google:Google Chrome、Electron、Chromium、node.js
  • SpiderMonkey 来自 Mozilla、Firefox
  • JavaScriptCore 来自 Apple、Safari
  • ActionScript 来自 Adobe、Flash

参考文献

华夏公益教科书