JavaScript 发展简史

218 阅读4分钟

原文链接: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 仓库 了解。