JavaScript是一种轻量级、解释型或即时编译型(JIT)的编程语言。它最初被设计用于增强网页的交互性,现在已经成为Web开发的核心技术之一,
轻量级指的是语言设计简单、核心库规模小、运行所占用的资源(内存和CPU)低。
解释型指的是代码运行时由解释器逐行翻译并执行,不需要预先编译为机器码。它的工作原理:解释器读取一行代码 → 语法分析 → 转换为中间指令 → 立即执行。
**即时编译型(JIT)**指的是在运行时动态将热点代码(频繁执行的代码)编译为机器码。它的工作原理:代码首次执行时由解释器处理 → 识别热点代码 → JIT编译器生成优化后的机器码 → 后续直接执行机器码
JavaScript与HTML、CSS共同协作,统称为前端三剑客。在Web开发中分别扮演不同的角色,承担不同的职责:
- HTML(结构):负责定义网页的内容和骨架,如标题、段落、图片等。
- CSS(表现):负责控制网页的布局、颜色、字体等视觉效果,只要职责是美化页面。
- JavaScript(行为):负责实现网页的交互逻辑、动态效果、内容更新及与后端服务器的通信。
1. JavaScript历史简述
JavaScript是由Brendan Eich 在1995年于Netscape公司发明。为了蹭Java的热度,命名为JavaScript,实际上与Java没有任何关系。
它的语言标准由ECMA国际组织管理,称为ECMAScript (简称ES),2009年发布的ES5奠定了基础,2015年发布的ES6(ES2015) 引入类、模块、箭头函数等现代语言特性。此后ECMAScript保持年度更新,不断添加新特性。
2. JavaScript的核心特点
- 动态弱类型:JavaScript是一种动态类型语言,变量的类型在运行时确定,并且能够在开发的过程中改变。它也是弱类型语言,在需要时自动进行类型转换,增加灵活性的同时也带来一些难以发现的错误。
- 基于原型:JavaScript使用原型链(通过一种链式结构,让对象能够访问其他对象的属性和方法)机制实现对象的继承。
- 函数是一等公民:函数在JavaScript中被视为对象,可以像任何变量一样被传递、赋值或作为参数传递给其他函数。
- 事件驱动与异步编译:JavaScript采用事件驱动机制,能够响应用户的操作(如点击、输入)。通过回调函数、Promise以及async/await等机制,JavaScript能够执行非阻塞的异步操作,非常适合处理网络请求等耗时的任务。
- 跨平台性:JavaScript几乎能在所有浏览器中运行。通过Node.js还可以在服务器端运行,真正实现了跨平台开发。
3. JavaScript的实现
完整的Javascript实现包括三部分
-
核心(ECMAScript):ECMA-262定义并提供核心功能。
-
文档对象模型(DOM):提供与网页内容交互的方法和接口。
-
浏览器对象模型(BOM):提供与浏览器交互的方法和接口。
3.1 ECMAScript
ECMA-262作为一个基准来定义,在它之上构建更稳健的脚本语言。Web浏览器只是ECMAScript实现的一种宿主环境。宿主环境提供ECMAScript与环境自身交互必需的扩展(如DOM)。
ECMAScript描述了这门语言下面这些内容:
-
语法
-
类型
-
语句
-
关键字
-
保留字
-
操作符
-
全局对象
ECMAScript只是对实现这个规范描述的所有方面的一门语言的称呼。JavaScript实现了ECMAScript,而Adobe ActionScript同样也实现了ECMAScript。
3.2 DOM (文档对象模型)
DOM是一个应用编程接口,用于在HTML中使用扩展的XML。DOM将整个页面抽象成一组节点。它提供对文档结构化的描述,并将HTML页面与脚本、程序语言联系起来。
DOM用一个逻辑树表示一个文档,每个分支的重点都是一个节点,每个节点包含着对象。
DOM的方法可以用特定的方法操作这个树,你可以改变文档的结构、样式和内容。
节点可以关联事件处理器,被触发时,事件处理器会被执行。
使用DOM API,可以轻松地删除、添加、替换、修改节点。
1998年10月,DOM Level 1成为W3C的推荐标准。这个规范由两个模块组成:DOM Core和DOM HTML。
3.3 BOM(浏览器对象模型)
BOM是唯一一个没有相关标准的 JavaScript 实现,HTML5 以正式规范的形式涵盖了尽可能多的 BOM 特性。
BOM主要针对浏览器窗口和子窗口(frame),通常也会把特定于浏览器的扩展都归在BOM,比如:
-
弹出新浏览器窗口的能力;
-
移动、缩放和关闭浏览器窗口的能力;
-
navigator对象,提供关于浏览器的信息;
-
location对象,提供浏览器加载页面的信息;
-
screen对象,提供关于用户屏幕分辨率的信息;
-
performance对象,提供浏览器内存占用、导航行为和时间统计的信息;
-
对cookie的支持;
-
其他自定义对象,比如XMLHttpRequest和IE的ActiveXObject。
4. 主要用途和应用场景
-
网页交互与动态内容:这是JavaScript最基础的用途。它可以 操作DOM、响应用户事件,进行表单验证以及创建动画效果等。
-
Ajax异步网络请求:通过AJAX或Fefch API技术,在不重新加载整个页面的情况下,与服务器交互。
-
前端框架与单页面应用(SPA):Vue、React等前端框架可以开发复杂的、类似桌面应用程序的单页面应用。
-
Node.js服务器端开发:Node.js 是一个开源、跨平台的运行环境,让JavaScript能够构建完整的Web服务器和后端应用程序。
-
移动应用与桌面应用开发:React Native、Ionic或Electron框架,可以实现跨平台的移动应用程序和桌面应用程序。
-
游戏开发:结合HTML5的 Canvas 和 WebGL 技术,JavaScript可以在浏览器中开发2D和3D游戏。
-
物联网(IoT):JavaScript应用于物联网设备的编程。