原文链接:The Evolution of JavaScript,by Shafayet Hossain
早期发展(1995)
JavaScript 由布兰登・艾奇(Brendan Eich)在网景公司(Netscape)开发的,旨在为网站带来交互性。最初被称为 Mocha,随后改名为 LiveScript,最终为了蹭 Java 的热度而更名为 JavaScript。早期的用法很基础,比如添加简单的表单验证。
<script>
alert('欢迎来到90年代的网络!');
</script>
在 MDN Web Docs 上阅读有关 JavaScript 诞生的更多信息。
标准化(1997)
为了统一语法,ECMAScript 应运而生。ECMAScript 3(1999 年)引入了一些改进,为浏览器的一致性奠定了基础。ECMAScript 5(2009 年)通过 “严格模式(strict mode)” 和诸如 forEach 等原生数组方法进一步使 JavaScript 现代化。
数组方法示例:
['apple', 'banana', 'cherry'].forEach(fruit => console.log(fruit));
在 ECMA International 上探索 ECMAScript 详细信息。
图示中文本:
JavaScript 是一种轻量级的解释型或即时编译型编程语言,具有一等函数。虽然它最为人熟知的是作为网页脚本语言,但许多非浏览器环境也在使用它,比如 Node.js、Apache CouchDB 和 Adobe Acrobat。JavaScript 是一种基于原型的、多范式的动态语言,支持面向对象、命令式和声明式(如函数式编程)风格。
JavaScript 的标准是 ECMAScript。截至 2012 年,所有现代浏览器都完全支持 ECMAScript 5。较旧的浏览器至少支持 ECMAScript 3。2015 年 6 月 17 日,ECMA 国际发布了 ECMAScript 的第六个主要版本,最初叫 ECMAScript 6 或 ES6,后面正式名称改为 ECMAScript 2015。
AJAX 和动态 Web(2000s)
AJAX(Asynchronous JavaScript and XML,即“异步 JavaScript 和 XML”)使 Gmail 和 Google Maps 等 Web 应用程序能够在不重新加载页面的情况下刷新数据,这标志着网页向更丰富的体验的转变。
AJAX 请求示例:
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/data', true);
xhr.onreadystatechange = () => {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.responseText);
}
};
xhr.send();
框架革新了 JavaScript
jQuery (2006) 和 MooTools 的出现简化了 DOM 交互,并引入了强大的跨浏览器兼容性。
原生 JS 与 jQuery 示例:
// 原生 JavaScript (2005)
document.querySelector('#btn').addEventListener('click', () => alert('Clicked!'));
// jQuery (2006)
$('#btn').click(() => alert('Clicked!'));
在 jQuery 文档中深入了解 jQuery 的影响。
现代时代:ES6+(2015)
ECMAScript 2015(ES6)带来了重大更新,通过引入 let、const、模板字面量、箭头函数、类和模块增强了编码体验、释放了 JS 应付大型项目的能力。
ES6 语法示例:
class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log(`Hello, my name is ${this.name}`);
}
}
const person = new Person('Alice');
person.greet(); // Hello, my name is Alice
参阅 MDN ECMAScript 2015 中的关于 ES6 更新说明。
Node.js 将 JS 带到服务端(2009)
Node.js 使 JavaScript 摆脱了浏览器的限制,使其能够在服务器上运行,为全栈 JavaScript 铺平了道路。
Node.js 示例(服务器创建):
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello, world!');
}).listen(3000);
console.log('Server running at http://localhost:3000/');
访问 Node.js 官网了解更多。
框架和库:React、Vue 和 Angular
React.js(2013 年)带来了基于组件的架构,而 Vue.js(2014 年)强调易用性。Angular(2016 年)通过 TypeScript 和强大的状态管理改进了 Web 应用开发。
React 代码示例:
function App() {
return <h1>Hello, React!</h1>;
}
阅读 React 官方文档了解更多。
TypeScript:为 JavaScript 提供类型安全(2012)
TypeScript 引入了静态类型,使在开发过程中更容易捕获错误。
TypeScript 代码示例:
// TypeScript
function greet(name: string): void {
console.log(`Hello, ${name}`);
}
greet(123); // Error: Argument of type 'number' is not assignable to parameter of type 'string'.
访问 TypeScript 官网了解更多。
异步编程革命(2017)
从回调地狱到 Promise 和async/await,JavaScript 的异步编程方法不断演进,提高了可读性和可维护性。
// 回调地狱
fetchData((data) => {
process(data, (result) => {
save(result, () => {
console.log('Saved!');
});
});
});
// 使用 Promise
fetchData().then(process).then(save).then(() => console.log('Saved!'));
// async/await (ES2017/ES8)
async function handleData() {
const data = await fetchData();
const result = await process(data);
await save(result);
console.log('Saved!');
}
阅读 MDN 异步函数了解更多详细信息。
JavaScript 未来(2024+)
JavaScript 在未来还会有更多功能添加,其中可能包含的特性包括装饰器(decorators)、记录(record)和元组类型(tuple types)以及模式匹配(pattern matching)等提案。
更加关于提案的信息,可以访问 TC39 Proposals 仓库 了解。