JavaScript是一种动态的编程语言
JavaScript是一种动态的编程语言,广泛应用于网页开发中,主要用于增强网页的交互性和动态性。作为Web开发的核心技术之一,它与HTML和CSS共同协作,HTML负责定义网页的内容结构,CSS处理样式和布局,而JavaScript则控制网页的行为和交互。用户可以利用JavaScript进行事件处理、表单验证、动画创建等多种功能。此外,JavaScript的应用已经扩展到服务器端(如Node.js)、移动应用开发和游戏开发等领域,成为现代编程环境中不可或缺的一部分。其跨平台和高适应性的特点,使得JavaScript成为全球最受欢迎和广泛使用的脚本语言之一。
定义
JavaScript 是一种高级的、解释执行的编程语言,主要用于构建网页和应用的交互界面。它允许开发者实现网页的动态效果和响应用户行为,同时也被用于服务器端编程、移动应用开发等多种平台。
发展历史
技术起源
1995年,JavaScript由Netscape的工程师Brendan Eich发明,最初命名为Mocha,后改为LiveScript,最终定名为JavaScript。它是在Netscape Navigator浏览器中首次实现的,旨在增加网页的动态功能和交互性。
发展历程
1997年,JavaScript被提交给欧洲计算机制造商协会(ECMA)进行标准化,该组织发布了第一个版本的ECMAScript标准(ES1),这是JavaScript的标准化版本。
1999年,发布了ECMAScript 3版本,这一版本为JavaScript的发展奠定了坚实的基础,引入了正则表达式、异常处理等新特性。
2005年,出现了Ajax(Asynchronous JavaScript and XML),这种技术使得Web应用可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。这极大地改善了用户体验,推动了Web 2.0时代的到来。
2008年,谷歌发布了Chrome浏览器,内置了V8 JavaScript引擎。V8引擎极大地提高了JavaScript的执行速度,这促进了更复杂的Web应用的开发。
2009年,Ryan Dahl推出Node.js [3],这是一个开源、跨平台的运行环境,允许开发者使用JavaScript来编写服务器端代码。
2015年及以后,ECMAScript标准的更新转为年度发布模式,每年的更新包括新的语言特性,这些特性使得JavaScript更加强大和灵活。这些更新如ECMAScript 2015(ES6)引入了类、模块、箭头函数等现代编程功能。
近年来,JavaScript的生态系统持续扩张,出现了大量的框架和库,如React [4]、Angular [5]、Vue.js [6]等,极大地丰富了JavaScript的应用场景和开发效率。
基本原理
JavaScript是一个多功能、灵活的编程语言,其功能服务和特点在多年的发展中不断扩展和优化。
主要功能和特点
事件处理
JavaScript能够响应用户操作,如点击、滚动、键入等,使得网页可以交互式地响应用户输入。
操作DOM
JavaScript可以操作HTML和CSS,改变网页内容、结构和样式,实现动态的页面效果。
异步编程
通过回调函数、Promises、async/await等机制,JavaScript能够执行非阻塞的异步编程,特别适合处理网络请求和文件操作。
JSON处理
作为网络传输中使用的主要数据格式,JavaScript原生支持JSON格式的解析和输出。
一等函数
JavaScript中的函数是“一等公民”,意味着它们可以像任何其他变量一样被传递和操作 [7]。
近年新增功能
此处以ECMAScript 2015及之后版本为例。
ES2015(ES6)
引入了许多重要的新特性,包括类(class)、模块(module)、箭头函数(arrow functions)、模板字符串(template strings)、解构赋值(destructuring)、let和const等。这些特性极大地改善了代码的组织和开发体验。
ES2016
增加了数组包含方法(Array.includes)和幂运算符()。
ES2017
引入了异步函数(async/await),使得异步代码的写法更加直观和易于理解。
ES2018
增强了正则表达式,添加了命名捕获组、正向断言、后向断言和dotAll模式。还引入了异步迭代器和Promise.finally()。
ES2019
引入了Array.prototype.flat()和Array.prototype.flatMap(),以及Object.fromEntries()等实用功能。
ES2020
新增了BigInt类型支持大整数运算,Promise.allSettled()、动态导入(import())、String.prototype.matchAll()等。
ES2021
引入了逻辑赋值运算符、String.prototype.replaceAll()、数字分隔符等功能,提升了代码的可读性和实用性。
系统版本
JavaScript的版本更新是通过ECMAScript(简称ES)的版本发布来体现的。ECMAScript是由ECMA国际(European Computer Manufacturers Association)标准化的脚本语言规范,JavaScript是它的一种实现。以下是主要的ECMAScript版本及其重要特性:
ECMAScript 1 (ES1)
发布时间:1997年6月
主要特性:最初版本,定义了基础的语法和功能。
ECMAScript 2 (ES2)
发布时间:1998年6月
主要特性:主要是规范化调整和错误修正。
ECMAScript 3 (ES3)
发布时间:1999年12月
主要特性:增加了正则表达式、try/catch异常处理、更严格的错误定义、字符串处理的改进等。
ECMAScript 4 (ES4)
状态:被废弃
说明:由于种种原因,ECMAScript 4未能正式发布,但其许多特性后来在ES5及ES6中得到实现。
ECMAScript 5 (ES5)
发布时间:2009年12月
主要特性:
严格模式("use strict")
JSON支持
新的Array方法(forEach, map, filter, reduce, some, every)
Object方法(Object.create, Object.defineProperty, Object.keys)
新的原生方法和增强的原型链
ECMAScript 5.1 (ES5.1)
发布时间:2011年6月
主要特性:作为ES5的一个小更新,主要进行了一些规范上的调整和错误修正。
ECMAScript 6 (ES6) / ECMAScript 2015
发布时间:2015年6月
主要特性:
let和const关键字
箭头函数(=>)
模板字符串(模板字面量)
解构赋值
默认参数值
for...of循环
Promise对象
类(class)和模块(module)
增强的对象字面量
Symbol类型
Set和Map数据结构
模块化的import和export
ECMAScript 2016 (ES7)
发布时间:2016年6月
主要特性:
Array.prototype.includes方法
幂运算符
ECMAScript 2017 (ES8)
发布时间:2017年6月
主要特性:
async/await
Object.entries和Object.values方法
字符串填充(padStart和padEnd)
Object.getOwnPropertyDescriptors
函数尾逗号(Trailing commas in functionparameters and calls)
ECMAScript 2018 (ES9)
发布时间:2018年6月
主要特性:
异步迭代(Async Iteration)
Rest/Spread属性
正则表达式改进(s修饰符,命名捕获组,后行断言)
Promise.finally
ECMAScript 2019 (ES10)
发布时间:2019年6月
主要特性:
Array.prototype.flat和Array.prototype.flatMap
Object.fromEntries
String.prototype.trimStart和String.prototype.trimEnd
Optional catch binding
Function.prototype.toString修正
ECMAScript 2020 (ES11)
发布时间:2020年6月
主要特性:
Nullish Coalescing Operator (??)
Optional Chaining Operator (?.)
BigInt
Dynamic import
Promise.allSettled
globalThis
Module namespace exports
ECMAScript 2021 (ES12)
发布时间:2021年6月
主要特性:
String.prototype.replaceAll
Promise.any
WeakRefs
新的逻辑赋值运算符(&&=,||=,??=)
ECMAScript 2022 (ES13)
发布时间:2022年6月
主要特性:
Class Fields
Private Methods and Fields
Top-level await
Ergonomic brand checks for private fields
RegExp Match Indices
ECMAScript 2023 (ES14)
发布时间:2023年6月
主要特性:
Array.fromAsync
TypedArray.fromAsync
RegExp hasIndices
ECMAScript 2024 (ES15)
发布时间:2024年6月
主要特性 [1]:
~)顶层 Await: ECMAScript 2024 引入了顶层 await,允许在脚本的顶层直接使用 await,而不需要将代码包装在异步函数中。
~)管道运算符: ECMAScript 2024 引入了管道运算符 (|>),提供了一种更简洁、更易读的方式来链接函数调用以进行数据转换。
~)通过原因链增强错误处理: ECMAScript 2024 在对象上引入了 cause 属性,允许链接错误,从而提供有关问题根本原因的宝贵信息。
~)符号描述以改进调试: ECMAScript 2024 引入了符号描述,允许向符号添加描述性字符串,从而使调试和代码理解更容易。
~)模块导入和导出语法: ECMAScript 2024 进一步发展和完善了模块系统,使得开发者可以更加灵活地组织和管理代码。
~)私有类字段和方法: ECMAScript 2024 引入了私有类字段和方法,允许在类中定义私有属性和方法,这些属性和方法只能在类的内部访问。
~)静态公共字段: ECMAScript 2024 引入了静态公共字段,允许在类中定义静态字段和方法,这些字段和方法可以在类本身访问。
~)Temporal API: ECMAScript 2024 提出了一个全新的用于处理日期和时间的标准对象和函数——Temporal。它为 JavaScript 日期/时间操作带来了以下修复:
1.仅可以创建和处理不可变Temporal对象;
2.提供用于日期和时间计算的简单 API;
3.支持所有时区;
4.从 ISO-8601 格式进行严格的日期解析;
5.支持非公历;
功能特性
技术特性
动态类型
JavaScript是一种动态类型语言,变量的类型是在运行时确定的,而不是在编译时确定的。这使得JavaScript具有很高的灵活性,可以在不显式声明类型的情况下操作数据。
弱类型
由于JavaScript是弱类型语言,它会在需要时自动进行类型转换。这种特性使得编写代码更加简洁,但也可能引发一些隐晦的错误。
原型继承
JavaScript使用原型链机制来实现继承。每个对象都有一个原型对象,从该对象继承属性和方法。通过修改对象的原型,可以影响所有从该原型继承的对象。
函数是第一公民
在JavaScript中,函数是一等公民,可以像其他变量一样被传递和操作。这意味着函数可以作为参数传递给其他函数,作为函数的返回值,甚至可以在函数内部定义函数。
事件驱动
JavaScript最强大的功能之一是其事件驱动机制。特别是在浏览器环境中,JavaScript通过事件处理程序来响应用户的操作,如点击、输入和滚动等。
非阻塞I/O和异步编程
JavaScript采用单线程模型,但通过事件循环机制和回调函数实现了非阻塞I/O操作。为了更好地处理异步操作,JavaScript引入了Promise对象和async/await语法,使异步编程更加直观和可管理。
兼容性
JavaScript广泛支持所有现代浏览器,并且通过Node.js也可以在服务器端运行。ECMAScript规范的不断发展也为JavaScript引入了许多新特性和改进。
DOM操作
JavaScript可以直接操作网页的文档对象模型(DOM),使得开发者能够动态更新内容、样式和结构,创建交互式和动态网页。
模块化
自ECMAScript 2015(ES6)引入模块化语法以来,JavaScript支持使用import和export关键字来实现模块化开发。这有助于代码的组织和重用,使得大型应用程序更加可维护。
运行环境多样性
除了在浏览器中运行,JavaScript还可以在服务器端(使用Node.js)、移动设备(使用React Native)和桌面应用程序(使用Electron)中运行,这使得JavaScript成为全栈开发的理想选择。
丰富的标准库和第三方库
JavaScript拥有丰富的标准库,并且有大量的第三方库和框架可供选择,如React、Vue.js、Angular、Express、Lodash等,极大地扩展了JavaScript的功能和应用场景。
强大的社区支持
JavaScript拥有一个庞大而活跃的开发者社区,丰富的在线资源、教程、工具和库,使得学习和使用JavaScript变得更加容易和高效。
技术局限
单线程模型
JavaScript运行在单线程环境中,尽管有事件循环和异步编程技术,但依然可能在处理大量并发任务时遇到瓶颈。例如,长时间运行的脚本可能会阻塞主线程,导致用户界面卡顿或无响应。
类型系统不严格
由于JavaScript是动态类型和弱类型语言,自动的类型转换可能导致一些非常隐蔽的错误。例如,'5' + 5会返回字符串'55'而不是数字10。这种隐式转换在大型项目中可能引发意外的行为。
安全性问题
JavaScript在客户端运行,容易受到跨站脚本攻击(XSS)等安全威胁。虽然有各种防护措施,但开发者需要特别注意编码实践和数据验证以防范这些问题。
浏览器兼容性
尽管现代浏览器对JavaScript的支持越来越一致,但不同浏览器之间仍可能存在兼容性问题。特别是对于较旧的浏览器版本,某些新特性或标准可能不被支持,需要进行额外的兼容性处理。
性能限制
JavaScript在性能上可能不如一些编译型语言,例如C++或Java。虽然通过JIT(Just-In-Time)编译技术和V8等高性能JavaScript引擎,JavaScript性能有了很大提升,但在处理高计算密集型任务时仍可能表现不佳。
缺乏标准库
与一些其他语言相比,JavaScript的标准库较为简单和有限。尽管有大量的第三方库和框架,但标准库的缺乏可能导致开发者需要依赖外部库,增加了项目的复杂性和潜在的维护成本。
内存管理
JavaScript的自动垃圾回收机制虽然简化了内存管理,但可能导致不可预见的内存泄漏和性能问题,特别是在处理大量对象或长时间运行的应用程序时。
多线程支持有限
尽管Web Workers提供了一种在浏览器中实现多线程的方法,但其功能和使用方式相对有限。WebWorkers不能访问DOM,数据传输只能通过消息传递,增加了实现复杂多线程任务的难度。
异步编程的复杂性
尽管Promise和async/await简化了异步编程,但处理复杂的异步逻辑和错误依然具有挑战性。嵌套的回调函数可能导致“回调地狱”,而错误处理则可能需要额外的精力和技巧。
移动设备性能
在移动设备上,JavaScript的性能和电池消耗可能是一个问题。由于移动设备的计算能力和资源有限,复杂的JavaScript应用可能导致高CPU使用率和电池耗尽。
开发工具
在 JavaScript 开发过程中,使用合适的工具可以极大地提升开发效率、代码质量以及项目的整体可维护性。以下是一些常用的 JavaScript 开发工具,涵盖了压缩、格式化、浏览器扩展、开发工具条、代码转换、HTTP监控等方面:
JavaScript压缩工具
JavaScript 压缩工具用于减少代码体积,以加快网页加载速度。这类工具通过删除不必要的空格、注释以及将变量名最小化,减少 JavaScript 文件的大小。JavaScript 压缩工具用于减少代码体积,以加快网页加载速度。这类工具通过删除不必要的空格、注释以及将变量名最小化,减少 JavaScript 文件的大小。
UglifyJS:一个流行的 JavaScript 压缩工具,可以压缩和混淆代码。它通过删除多余的空格和注释、缩短变量名,来降低文件大小,同时还能优化代码逻辑。
Terser:Terser 是 UglifyJS 的演进版本,支持 ES6+ 代码压缩,并且具备优化现代 JavaScript 代码的能力。
JavaScript格式化工具
格式化工具能够帮助开发者保持代码风格一致,提高代码的可读性和团队协作效率。
Prettier:一款广泛使用的代码格式化工具,支持多种语言和文件格式。Prettier 能自动对 JavaScript 代码进行格式化,确保代码风格一致,支持各种编辑器集成。
ESLint:主要是代码规范检查工具,除了可以发现代码中的潜在错误,还可以根据配置规则自动格式化代码。通过 ESLint 的插件,可以灵活定制代码风格和质量要求。
浏览器开发工具
浏览器扩展和开发工具条有助于调试和分析前端代码,查看实时执行的代码以及网页性能表现。
Chrome DevTools:Chrome 浏览器自带的开发者工具,用于调试 JavaScript、分析网页性能、查看 HTTP 请求、监控 DOM 变化等。开发者可以在此进行断点调试、性能分析、查看网络请求、管理存储等。
Firefox Developer Tools:Firefox 的内置开发工具,类似 Chrome DevTools,提供了全面的 JavaScript 调试、DOM 检查、网络监控、性能分析等功能。
HTTP监控工具
HTTP 监控工具用于捕捉和分析 HTTP 请求及响应,帮助开发者调试网络通信问题。
Postman:一个功能强大的 HTTP 客户端工具,支持发送 REST、SOAP、GraphQL 请求。开发者可以用 Postman 来测试 API、查看请求头、响应数据,并进行自动化测试。
Fiddler:一款流行的 HTTP 抓包工具,可以监控所有通过 HTTP 和 HTTPS 传输的数据包,帮助开发者排查网络问题,检查 JavaScript 与服务器之间的通信。
Wireshark:网络流量分析工具,适合高级用户监控 HTTP/HTTPS 请求,查看网络流量,分析协议细节,常用于深度网络调试。
开发工具条
这些工具条和插件通常集成在浏览器中,帮助开发者快速访问各种调试工具或实用工具。
Web Developer Toolbar:一个 Chrome 和 Firefox 浏览器的插件,提供了许多网页开发工具,允许开发者轻松查看和调试 HTML、CSS、JavaScript,并进行页面验证等。
Wappalyzer:帮助开发者查看当前网页使用的技术栈,包括 JavaScript 框架、编程语言、服务器技术等。
JavaScript转换工具
JavaScript 转换工具用于将最新的 JavaScript 代码转换为旧版浏览器能够支持的兼容性代码,或是将 TypeScript、JSX 等其他语法转换为 JavaScript。
Babel:一个流行的 JavaScript 编译器,可以将现代 ES6+ 代码转换为兼容性更好的 ES5 代码,以支持旧浏览器。Babel 还支持编译 JSX(React)语法和 TypeScript。
TypeScript:TypeScript 是 JavaScript 的超集,增加了静态类型检查功能。通过 TypeScript 编译器,开发者可以将 TypeScript 代码转换为标准的 JavaScript。
JavaScript包管理工具
包管理工具用于管理 JavaScript 依赖包,帮助开发者安装、更新和移除项目中的第三方库。
npm:Node.js 的官方包管理工具,是最常用的 JavaScript 包管理工具,提供了丰富的开源库。开发者可以使用 npm 轻松安装、管理项目依赖。
Yarn:Facebook 开发的包管理工具,类似于 npm,提供了更快的依赖安装速度和更一致的包管理体验。
版本管理和代码协作工具
代码版本管理和协作工具帮助开发者跟踪代码变更和团队合作。
Git:分布式版本控制系统,广泛用于跟踪代码变动。通过 Git,开发者可以轻松管理代码历史、分支和合并。
GitHub:基于 Git 的代码托管平台,支持团队协作、代码审查、CI/CD 流程,是开发者管理 JavaScript 项目的常用平台。
JavaScript测试工具
测试工具帮助开发者确保代码的正确性,避免回归错误。
Jest:Facebook 开发的 JavaScript 测试框架,支持单元测试、集成测试,并且与 React 深度集成,适合前端开发。
Mocha:灵活的 JavaScript 测试框架,支持同步和异步测试,常与 Chai 断言库搭配使用,用于测试 Node.js 和浏览器端 JavaScript。
自动化构建工具
自动化构建工具帮助开发者进行代码打包、压缩、自动化测试和发布。
Webpack:现代 JavaScript 应用的模块打包工具,能够将各种资源(JavaScript、CSS、图像等)打包为一个或多个文件,并支持代码分割和动态加载。
Gulp:基于流的自动化构建工具,允许开发者定义任务(如压缩代码、转换 SASS、自动刷新浏览器)并自动执行。
开发环境
VisualStudio Code (VS Code)
Visual Studio Code 是目前最受欢迎的 JavaScript 开发环境,由微软开发。VS Code 提供了强大的编辑功能,如代码自动补全、语法高亮、代码折叠等,且内置对 Git 的支持,便于版本控制。通过其庞大的扩展市场,开发者可以安装丰富的插件,如 ESLint、Prettier、Debugger for Chrome 等,进一步提升开发体验。VS Code 的跨平台特性使其在 Windows、macOS 和 Linux 上都能运行,轻量化设计和良好的性能让其在大型项目中依旧表现出色。
WebStorm
WebStorm 是由 JetBrains 开发的专业 JavaScript IDE,专门为现代 JavaScript 开发设计。它支持 ES6、TypeScript、React、Vue、Angular 等主流框架,内置了强大的调试工具、代码分析工具以及测试工具。WebStorm 的智能提示和自动补全功能极其强大,帮助开发者快速定位错误并提高开发效率。虽然 WebStorm 是一款付费工具,但它的强大功能和对多种 JavaScript 框架的深度支持,使其在企业开发环境中备受青睐。
SublimeText
Sublime Text 是一款轻量级的文本编辑器,支持多种编程语言,包括 JavaScript。它启动速度快,占用资源少,特别适合小型或中型项目的开发。Sublime Text 支持通过插件扩展功能,开发者可以安装 JavaScript 相关的插件,如 JSHint、Prettier 和 Git Integration 等,增强编辑器的功能。尽管与 VS Code 和 WebStorm 相比 Sublime Text 在功能上有所欠缺,但其极简设计和灵活的插件系统使其仍然是开发者偏爱的工具之一。
Atom
Atom 是 GitHub 开发的一款开源文本编辑器,广泛应用于 JavaScript 开发。Atom 拥有直观的用户界面、强大的自定义功能,并且可以通过社区提供的插件扩展其功能,如支持 JavaScript 代码补全、语法高亮、调试等。Atom 最大的特点是可高度自定义,开发者可以轻松修改其核心代码以适应自己的开发需求。此外,Atom 支持多平台运行,但与 VS Code 和 Sublime Text 相比,Atom 在处理大型项目时的性能表现稍显逊色。
Brackets
Brackets 是一款专注于前端开发的开源文本编辑器,由 Adobe 开发,适合 HTML、CSS 和 JavaScript 开发。Brackets 的实时预览功能是其一大亮点,开发者可以在编辑代码时立即查看更改后的效果,特别适合前端设计和布局调整。它也提供了 JavaScript 代码自动补全、语法检查等功能,并通过插件扩展如 Beautify、Emmet 来增强开发体验。虽然 Brackets 功能丰富,但它的主要目标是前端开发,因此在后端开发中的应用较少。
应用
网页开发
JavaScript最广泛的应用是在网页开发中,用于增强网页的交互性和动态性。
~)动态网页内容:通过操作DOM(文档对象模型),JavaScript可以实时更新网页内容而无需刷新页面。
~)表单验证:在用户提交表单之前进行数据验证,提高用户体验并减少服务器负载。
~)动画和图形:使用HTML5的Canvas和SVG,JavaScript可以创建复杂的动画和图形效果。
~)单页应用(SPA):框架如React、Vue.js和Angular使得构建复杂的单页应用变得更加容易和高效。
服务器端开发
随着Node.js的出现,JavaScript也广泛应用于服务器端开发。
~)Web服务器:Node.js允许使用JavaScript编写高性能的Web服务器,如Express.js框架 [8]。
~)实时应用:利用WebSocket,JavaScript可以开发实时聊天、在线游戏等需要即时数据更新的应用。
~)API服务:Node.js可以用来创建RESTful和GraphQL API服务,为前端应用提供数据支持。
移动应用开发
JavaScript在移动应用开发中也有重要应用,主要通过混合开发框架和跨平台工具实现。
~)React Native:允许开发者使用JavaScript编写跨平台的移动应用,生成原生iOS和Android应用。
~)Ionic [9]和Cordova:使用Web技术(HTML、CSS、JavaScript)构建移动应用,并打包成原生应用。
桌面应用开发
JavaScript不仅限于Web和移动领域,还可以用来开发桌面应用。
~)Electron [10]:通过Electron框架,可以使用Web技术开发跨平台的桌面应用,例如Visual Studio Code和Slack都是用Electron开发的。
游戏开发
JavaScript在游戏开发中也有应用,特别是网页游戏和移动游戏。
~)Phaser [11]:一个流行的JavaScript游戏框架,用于创建2D游戏。
~)Three.js:一个3D图形库,用于创建复杂的3D游戏和图形效果。
物联网(IoT)
JavaScript也在物联网领域有着应用,通过Node.js和各种硬件库,可以开发和控制智能设备。
~)Johnny-Five [12]:一个JavaScript机器人和物联网库,用于与Arduino等硬件交互。
~)Node-RED [13]:一个基于Node.js的流式编程工具,用于连接和控制物联网设备。
人工智能和机器学习
尽管Python在人工智能和机器学习领域更为流行,但JavaScript也有其应用场景。
~)TensorFlow.js [14]:一个用于在浏览器和Node.js中进行机器学习的库。
~)Brain.js [15]:一个简单的JavaScript神经网络库,用于训练和使用人工神经网络。
自动化和脚本
JavaScript可以用于自动化任务和编写脚本。
~)Gulp [16]和Grunt [17]:自动化构建工具,用于自动化前端开发中的常见任务,如代码压缩、测试和部署。
~)Puppeteer [18]:一个用于控制无头Chrome浏览器的库,可以用于网页抓取和自动化测试。
扩展和插件开发
JavaScript还可以用于开发浏览器扩展和插件。
~)Chrome扩展 [19]:使用JavaScript可以开发各种Chrome浏览器扩展,添加新的功能或修改网页的行为。VS Code插件 [20]:使用JavaScript和Node.js可以开发VS Code的插件,扩展编辑器的功能。