1、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移动应用开发

相关新闻

大模型API调用量:开发者用脚投票的硬通货与真实价值

大模型API调用量:开发者用脚投票的硬通货与真实价值

1. 从喧嚣到现实:大模型赛道的“冰与火之歌”如果你最近关注AI领域,可能会被各种“日活破亿”、“用户激增”的新闻刷屏。整个行业似乎一片繁荣,仿佛每个大模型都在以惊人的速度攻城略地。但作为一名在技术一线摸爬滚打了多年的从业者&#x…

2026/11/11 18:19:58 阅读更多 →
GLM-5.3 Coder免费1亿Token开发实战:从API接入到IDE配置

GLM-5.3 Coder免费1亿Token开发实战:从API接入到IDE配置

先说一个正在发生的现实:AI 编程工具正在全面走向订阅制,每个月的固定成本会越来越不友好。通用对话助手做代码审查并不是不行,但一次长对话就可能烧掉几千 Token,上下文一长,经济性立刻劣化。于是,很多人开…

2026/11/10 2:19:35 阅读更多 →
燃气行业数智融合转型:从数字底座到AI Agent的落地实践

燃气行业数智融合转型:从数字底座到AI Agent的落地实践

1. 从“抄表工”到“智慧大脑”:燃气行业的数智融合转型之痛与机遇 如果你在燃气行业待过几年,或者家里有亲戚朋友是燃气公司的,你大概听过这样的抱怨:半夜接到报修电话,说某片区压力异常,值班的师傅得翻出…

2026/11/9 8:29:36 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/10 23:32:01 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/10 23:32:03 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/11 2:31:33 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/11 17:16:37 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/11 17:16:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/10 23:32:10 阅读更多 →

日新闻

周新闻

月新闻