JavaScript编程
Javascript 是一种以 ECMAScript 为语言标准、形式化的、解释执行的编程语言。Javascript 引擎负责解释执行 Javascript,引擎最常见的形式是嵌入在浏览器中用于执行网页中的 Javascript,但也可以嵌入 Javascript 运行环境(如 node),用来执行任意 Javascript 文件。
第一个 Javascript 引擎由网景公司开发出来,用于嵌入 Web 浏览器。V8 是一种为了 Google Chrome 浏览器而开发的 Javascript 引擎,它也可以用作独立的解释器。Adobe Flash 使用叫做 ActionScript 的 Javascript 引擎来开发 Flash 程序。
初步认识
更常见的JavaScript是用于客户端的网络编程。- 它的确切名称是ECMAScript。
- 它是由网景通讯公司(现在为Mozilla基金会的)研发的。
- JavaScript不是Java。
Java与JavaScript仅仅都在语法上承袭C语言的风格,但两者互不相干。 - JavaScript不是JScript。
JScript和JavaScript的应用范围相似,但两者也是互不相干的。 - JavaScript不只是网页的编程语言,它和其他编程语言一样复杂,甚至更复杂。
JavaScript(JS)是一种实现国际标准ECMAScript的编程语言。它基于以下几个概念:
动态数据类型
JS 有一些原始数据类型(Number、String、Boolean、BigInt、Symbol、Undefined、Null),以及各种派生的数据类型对象(Array、Date、Error、Function、RegExp)[1] [2]。如果一个变量存在,它的类型是明确的。但该类型可以随时通过将不同类型的值赋给变量来改变,例如:代码片段 let x; x = 'Some text'; x = 2; x = [10, 11, 12];
是完全正确的。它不会引发编译时或运行时错误。唯一变化的是变量 x
的类型从 Undefined 变为 String,再变为 Number,最后变为 Object/Array。
(注:JSON 是一种基于文本的数据格式,而非数据类型。因此,它是与语言无关的。它使用 JavaScript 对象语法。)
函数式编程
函数是类似于变量的一级公民。它们可以赋值给变量,可以作为参数传递给其他函数,或者从函数中返回。代码片段 function sayHello() {return 'Good morning'}; let x = sayHello; console.log(x());
创建了一个函数 sayHello
,将其赋给变量 x
,并通过调用 x()
执行该函数。
面向对象编程
JS 支持通过原型来进行面向对象编程和继承。原型是一个可以被克隆和扩展的对象。这样,原型链就会形成。这与其他面向对象语言(如 Java)不同,后者通过类来实现继承等面向对象特性。然而,在语法层面,JS 也支持类。只是这只是“语法糖”。在底层,JS 使用原型机制。
类 C 语法
JS 的语法与 C、Java 或其他 C 家族语言非常相似。但我们必须始终注意,概念和运行时行为有显著不同。
与 Java 的关系
JS 除了具有类 C 语法外,和 Java 没有任何关系。为了避免可能的混淆,我们想清晰地强调 JS 和 Java 之间的一些区别。
最初,Netscape 开发了 JavaScript,而 Sun Microsystems 开发了 Java。Java 包括类和对象实例,而 JavaScript 使用原型。在 Java 中,变量在使用前必须声明,而在 JS 中这是不必要的(但不推荐)。
在 Java 中,变量有不可变的静态类型(例如 int 或 String),并且在程序运行的整个生命周期中保持不变。而在 JS 中,变量也有类型(例如 Number 或 String),但这个类型可以在程序运行时发生变化。类型是由环境决定的。因此,定义类型既不是必需的,也不可能显式地定义。
int x = 0; // Java: '类型名称','变量名称',...
let x = 0; // JS: 'let' 或 'const','变量名称',...
// 类型会根据等号右侧的值确定为 'Number'。
let x = String(0); // JS: 显式将类型从 'Number' 更改为 'String',然后赋值给 x
// 类型将变为 'String'。可以通过:alert(typeof x) 来验证。
JS 引擎
JS 可以在客户端和服务器端运行。最初的 JS 版本是在浏览器中运行的,浏览器只是作为解释器。如今,JS 语言通过即时编译器(JIT)来处理。它们解析脚本,创建抽象语法树(AST),优化该树,从 AST 生成 JIT 特定的字节码,再从字节码生成硬件特定的机器码,并执行机器码。这种即时编译器不仅存在于浏览器中,也可以是其他应用程序的一部分,例如:主要用 C++ 编写的 node.js。
常用的 JS 引擎有:
- Google 的 V8:Google Chrome、Electron、Chromium、node.js
- Mozilla 的 SpiderMonkey:Firefox
- Apple 的 JavaScriptCore:Safari
- Adobe 的 ActionScript:Flash
Java 包含类和对象实例,而 JavaScript 使用原型。
在Java中,要输出“Hello world!”,代码是:
System.out.println("Hello world!");
在JavaScript中则是:
document.write("Hello world!");
本书的受众
本书假设您在使用计算机,Web浏览器,文本编辑器和软件开发环境方面具有丰富的知识和经验。由于您不会在本书中学习 HTML,CSS,Java 或网站设计等相关内容,因此请查阅适当的书籍以了解这些主题。