JavaScript语言全面概述:从历史到现代实践 - JavaScript学习系列文章
一、JavaScript的历史与发展JavaScript诞生于1995年由Netscape公司的Brendan Eich在短短10天内设计完成。最初命名为Mocha后改为LiveScript最终为了借助Java的流行度而定名为JavaScript(尽管两者并无直接关系)。重要历史节点1996年微软推出JScript与Netscape竞争1997年ECMAScript标准第一版发布(ECMA-262)2005年AJAX技术兴起JavaScript重要性提升2009年ES5发布带来严格模式、JSON支持等2015年ES6/ES2015发布JavaScript现代化2016至今每年发布新标准持续演进Javascript与ECMAScript的关系JavaScript是ECMAScript的实现之一完整的JavaScript包括ECMAScript核心语言基础(语法、类型、语句等)DOM文档对象模型(浏览器文档操作)BOM浏览器对象模型(与浏览器窗口交互)二、ECMAScript标准详解2.1 版本演进版本发布时间主要特性ES11997初始版本ES31999正则表达式、try/catchES52009严格模式、JSON、数组方法ES62015let/const、类、模块、Promise等ES20162016指数运算符、Array.prototype.includesES20172017async/await、共享内存ES20202020可选链、空值合并、BigInt2.2 ES6核心特性1)块级作用域与let/const// ES5只有函数作用域和全局作用域var x 10;if (true) { var x 20; // 同一个变量 console.log(x); // 20}console.log(x); // 20// ES6引入块级作用域let y 10;if (true) { let y 20; // 不同的变量 console.log(y); // 20}console.log(y); // 10const z 30;// z 40; // 错误不能重新赋值2) 箭头函数// ES5函数表达式var multiply function(a, b) { return a * b;};// ES6箭头函数const multiply (a, b) a * b;// this绑定差异function Counter() { this.count 0;// ES5方式需要额外绑定this var self this; setInterval(function() { self.count; }, 1000);// ES6箭头函数自动绑定词法this setInterval(() { this.count; }, 1000);}3)类语法// ES5原型继承function Person(name) { this.name name;}Person.prototype.sayHello function() { console.log(Hello, this.name);};// ES6类语法class Person { constructor(name) { this.name name; }sayHello() { console.log(Hello, ${this.name}); }// 静态方法 static createAnonymous() { return new Person(Anonymous); }}class Student extends Person { constructor(name, grade) { super(name); this.grade grade; }}4)模块系统// math.jsexport function add(a, b) { return a b;}export const PI 3.14159;// app.jsimport { add, PI } from ./math.js;console.log(add(2, PI)); // 5.14159// 默认导出// logger.jsexport default function(message) { console.log(message);}// app.jsimport log from ./logger.js;log(Hello Modules!);5)Promise与异步编程// 回调地狱示例getData(function(a) { getMoreData(a, function(b) { getMoreData(b, function(c) { console.log(c); }); });});// Promise解决方案getData() .then(a getMoreData(a)) .then(b getMoreData(b)) .then(c console.log(c)) .catch(error console.error(error));// async/await语法糖async function fetchData() { try { const a await getData(); const b await getMoreData(a); const c await getMoreData(b); console.log(c); } catch (error) { console.error(error); }}2.3 最新的ECMAScript特性1)可选链操作符(?.)const user { profile: { name: John, address: { city: New York } }};// 传统方式const city user user.profile user.profile.address user.profile.address.city;// 可选链const city user?.profile?.address?.city; // New Yorkconst zipCode user?.profile?.address?.zipCode; // undefined而不是错误2) 空值合并运算符(??)// 传统方式const configValue (config.setting ! null config.setting ! undefined) ? config.setting : default;// 空值合并const configValue config.setting ?? default;// 与||的区别0 || default // default (0是falsy)0 ?? default // 0 (只有null/undefined会触发默认值)3)动态导入// 静态导入// import { largeModule } from ./largeModule.js; // 初始加载// 动态导入button.addEventListener(click, async () { const module await import(./largeModule.js); module.largeFunction();});三、JavaScript运行环境3.1 浏览器环境浏览器提供完整的JavaScript执行环境包括JavaScript引擎解析和执行代码DOM API文档操作BOM API浏览器窗口操作事件循环处理异步操作// 浏览器环境示例document.getElementById(myButton).addEventListener(click, () { fetch(https://api.example.com/data) .then(response response.json()) .then(data { localStorage.setItem(userData, JSON.stringify(data)); history.pushState({}, , /new-page); });});3.2 Node.js环境Node.js基于Chrome V8引擎提供了服务器端JavaScript运行环境CommonJS模块系统文件系统访问网络操作原生扩展支持// Node.js示例const http require(http);const fs require(fs).promises;const server http.createServer(async (req, res) { try { const data await fs.readFile(./index.html); res.writeHead(200, { Content-Type: text/html }); res.end(data); } catch (err) { res.writeHead(500); res.end(err.message); }});server.listen(3000, () { console.log(Server running on http://localhost:3000);});3.3 其它运行环境Deno安全的TypeScript运行时Bun高性能JavaScript运行时Electron桌面应用开发React Native移动应用开发

相关新闻

AI智能体驱动软件开发:从Copilot到Conductor的范式转移

AI智能体驱动软件开发:从Copilot到Conductor的范式转移

1. 项目概述:当AI成为首席架构师最近在技术圈里,一个名为“Harness Engineering”的概念被频繁提及,它并非指某个具体的工具或平台,而是一种全新的工程范式。简单来说,它描述了一种由AI智能体深度驱动、近乎全自动的软…

2026/8/25 10:44:49 阅读更多 →
FastAPI Guard 快速开始教程:5分钟安装并启用你的第一个安全中间件

FastAPI Guard 快速开始教程:5分钟安装并启用你的第一个安全中间件

FastAPI Guard 快速开始教程:5分钟安装并启用你的第一个安全中间件 【免费下载链接】fastapi-guard A security library for FastAPI that provides middleware to control IPs, log requests, detect penetration attempts, honeypot setup, behavioural analysis,…

2026/8/25 10:44:49 阅读更多 →
micro-sam CLI命令完整参考:9个命令行工具快速搭建自动化标注与训练工作流

micro-sam CLI命令完整参考:9个命令行工具快速搭建自动化标注与训练工作流

micro-sam CLI命令完整参考:9个命令行工具快速搭建自动化标注与训练工作流 【免费下载链接】micro-sam Segment Anything for Microscopy 项目地址: https://gitcode.com/gh_mirrors/mi/micro-sam micro-sam(μSAM)是面向显微镜图像的…

2026/8/25 10:44:49 阅读更多 →

最新新闻

TUI vs 原生UI:从命令行到图形界面的技术选型与实战指南

TUI vs 原生UI:从命令行到图形界面的技术选型与实战指南

大家好,我是专注于分享开发实战与工程经验的博主。在开发命令行工具时,我们常常面临一个选择:是打造一个功能强大但交互复杂的 TUI(文本用户界面),还是拥抱现代的原生图形界面?最近,…

2026/8/25 12:03:45 阅读更多 →
TUI vs GUI:从命令行界面到原生图形界面的技术选型与实践指南

TUI vs GUI:从命令行界面到原生图形界面的技术选型与实践指南

这次我们来看一个在开发者社区引发讨论的观点:“别再写 TUI 了”。这个观点由知名安全研究员 Thomas Ptacek 提出,核心是呼吁开发者放弃为现代工具编写传统的命令行文本用户界面,转而拥抱原生图形用户界面。这并非一个具体的开源项目&#xf…

2026/8/25 12:03:45 阅读更多 →
AI智能体工程化实战:基于LangGraph构建多智能体协作系统

AI智能体工程化实战:基于LangGraph构建多智能体协作系统

大家好,我是专注于技术实战分享的博主。在探索AI工程化落地的过程中,我们常常面临一个核心挑战:如何将前沿的AI能力,特别是智能体(Agents),有效地整合到现有的软件工程流程中?这不仅…

2026/8/25 12:03:45 阅读更多 →
高性能分布式KV存储引擎RocksDB入门与C/C++编码实战

高性能分布式KV存储引擎RocksDB入门与C/C++编码实战

一、RocksDB项目介绍 RocksDB是由Facebook团队开发的一个嵌入式、持久化的键值(Key-Value)存储数据库,其核心设计基于Google的LevelDB项目。当时为了应对大规模数据存储与高并发写入场景时遇到的性能瓶颈,而传统的基于B-Tree结构的数据库在随机写入场景下…

2026/8/25 12:03:44 阅读更多 →
临床AI多智能体系统安全风险剖析与加固实践

临床AI多智能体系统安全风险剖析与加固实践

在临床AI的落地浪潮中,多智能体(Multi-Agent)系统因其能模拟专家会诊、协同处理复杂诊疗任务而备受瞩目。然而,近期一系列实验和案例揭示了一个令人警醒的现象:一个看似微小的错误,例如一个被污染的提示词&…

2026/8/25 12:02:44 阅读更多 →
如何解决ES深度分页

如何解决ES深度分页

在Elasticsearch中,深度分页指的是请求靠后的页码(如第1000页,每页20条)时,性能急剧下降甚至内存溢出的问题。面试官期望你理解ES分页原理,并给出合理的解决方案。一、为什么深度分页慢? ES默认…

2026/8/25 12:02:44 阅读更多 →

日新闻

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/25 0:00:34 阅读更多 →
Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

2026/8/25 0:00:34 阅读更多 →
数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

1. 项目概述:从“会做”到“会写”的竞赛核心跃迁“全国大学生数学建模竞赛”,这个名字对理工科学生来说,分量极重。每年,无数团队在三天三夜的时间里,为一个开放性问题绞尽脑汁,从建立模型、求解算法到编程…

2026/8/25 0:00:34 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/24 20:22:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →