🕸️ 第二章 Web特有的架构
📄 一句话概括

浏览器端三十年只有一门语言,但这一门内部正在换手——写的是 TypeScript,跑的是 JavaScript,这条流水线的两头都在同一件事上。

📝 本节和前面几节的关系

2-10 说两边语言分家,这一条讲浏览器这一边。它也是本章里最容易让人误判的一条:看新闻会以为 JavaScript 要完了,看数据才发现只是换了写法。

一、只有一门语言能用

浏览器这个环境有个很特别的地方:它只认一门语言。这件事从 1995 年到现在基本没变过。

所以浏览器端的覆盖率数据非常极端——绝大多数网站都在用它,剩下的加起来不到百分之三,而且多半是历史遗留的探测残留。

这种独苗地位带来一个后果:这一门语言的好坏,直接等于整个前端体验的下限。所以它每被嫌弃一次,就必须自己往前挪一步。

二、换手:TypeScript 冒头

TypeScript 不是另一门语言,而是在 JavaScript 上加了一层类型检查:写的时候把类型标出来,工具就能在运行之前发现一批错误。

它在 2025 年第一次登上榜首,把 Python 和 JavaScript 都挤到了后面。差距很小(1.6%),但方向很明确。

三、动手 Demo:榜首换人的那一年

rows = [("TypeScript", 2636006, "+66.6%"),
        ("Python", 2594000, "+48.8%"),
        ("JavaScript", 2150000, "+24.8%")]
for i, (lang, n, yoy) in enumerate(rows, 1):
    print("%d  %-12s %10s  %s" % (i, lang, format(n, ","), yoy))
lead = 2636006 - 2594000
print("领先 Python:%s 人,占 %.1f%%"
      % (format(lead, ","), lead * 100.0 / 2636006))

实跑输出:

--------------------------------------------------------------------
D11  客户端的脚本语言:JavaScript、TypeScript
--------------------------------------------------------------------
  浏览器上能跑的语言,三十年里其实只有一门:
  ----------------------------------------------------------------------------------------
  语言                    覆盖的网站      现在还行吗
  ----------------------------------------------------------------------------------------
  JavaScript              98.9%           唯一的正式选手
  其余各语言加起来        不到 3%         多是历史遗留的探测残留
  ----------------------------------------------------------------------------------------

  而 JavaScript 这一家,内部正在发生一次换手。
  GitHub 2025 年度报告(按月活贡献者排名):
  ----------------------------------------------------------------------------------------
  排名    语言            月活贡献者        同比
  ----------------------------------------------------------------------------------------
  1       TypeScript      2,636,006         +66.6%
  2       Python          约 259.4 万       +48.8%
  3       JavaScript      约 215 万         +24.8%
  4       Java            约 150 万         +20.7%
  5       C#              约 110 万         +22.2%
  ----------------------------------------------------------------------------------------

  TypeScript 领先 Python 约 42,006 人——放在 263 万里只差 1.6%。
  差距很小,但意义不小:这是十几年来第一次,榜首既不是 JavaScript,
  也不是 Python,而是 JavaScript 的【带类型版本】。

  再看两组开发者调查:
  ----------------------------------------------------------------------------------------
  调查                      结果
  ----------------------------------------------------------------------------------------
  State of JS 2025          只写 TypeScript 的占 40%,只写 JavaScript 的约 6%
  Stack Overflow 2025       专业开发者里用过 JavaScript 68.8%、TypeScript 48.8%
  同一份调查                TypeScript 用户里 58% 表示还想继续用,JavaScript 是 46.8%
  ----------------------------------------------------------------------------------------

  0.5 秒把两者的关系说清:
    JavaScript 是浏览器认识的那门语言;
    TypeScript 是 JavaScript 上加了一层类型检查——
    写代码时更早发现错,但浏览器不认识它,上线前要编译回 JavaScript。

  所以【TypeScript 排第一】不等于【JavaScript 退场】:
  它们是同一条流水线的两头——写的是上面那个,跑的是下面那个。

  最后一件事和 2-10 呼应:无论写的是哪种,
  最终发到浏览器的那份代码,用户一定能看到,也一定能改。
  【前端代码不是秘密】——这条在 TypeScript 时代依然成立。

读这个输出:增速那一列比排名更值得看。TypeScript 一年涨了 66%,JavaScript 只涨了 25%——这说明新增的代码几乎都写成了带类型的那种。再看第二、三名:Python 是被 AI 推上去的,JavaScript 还在用,但新项目里出现得越来越少了。

四、为什么是类型赢了

两个原因叠在一起。一是团队协作:代码要看很多遍,类型等于把一部分注释交给了工具去检查,改坏了立刻能发现。

二是 AI 写代码:给模型的上下文越明确,它写得越准。类型恰好就是最明确的那种上下文。所以这两年的增速里,有一部分是 AI 工具推着走的。

要记住的是:TypeScript 最后要编译回 JavaScript 才能跑——浏览器不认识类型。所以【TypeScript 排第一】不等于【JavaScript 退场】,它们是同一条流水线的两头。

五、⚠️ 2026 现状

调查数据能看出这个过渡期的样子:只写 TypeScript 的人已经占四成,只写 JavaScript 的只剩约 6%。但按全体开发者算,用过 JavaScript 的仍然更多(近七成)——因为它跑在运行时,谁都绕不开。

还有一条和 2-10 呼应的:无论写的是哪一种,最后发到浏览器的那份代码,用户一定能看到、也一定能改。这条规矩不会因为换了写法而改变。

30 秒实验

  1. 按 F12,切到 Console 面板,输入 document.title 回车。
  2. 看看返回了什么——那就是这一页的标题,来自页面里的标签,而你现在能读它。
  3. 再试试改一改页面上的文字——感受一下【这个页面在你的浏览器里是由你说了算的】。

常见误区

  1. 错误:TypeScript 是一门新语言,和 JavaScript 没关系。——纠正:它是 JavaScript 加了一层类型检查。浏览器只认 JavaScript,所以 TypeScript 必须编译回去才能跑。把两者看成一条流水线的两头,就不会在【学哪一个】上纠结:先学下面那个,再往上加类型。
  2. 错误:JavaScript 排到第三,说明它要死了。——纠正:排名看的是【新写了多少代码】,不是【在运行的有多少】。JavaScript 仍然是唯一能在浏览器里跑的语言,装机覆盖率接近百分之百。没落的不是它,是【只用它、不加类型】这种写法。
  3. 错误:类型只是给编辑器看的提示,运行时还是要出错。——纠正:它的价值正是在运行之前把错误拦下来。运行时的校验(比如服务器端校验)解决的是另一类问题——这两层是叠加的,不是二选一。
  4. 错误:既然前端代码谁都能看到,那写得好不好无所谓。——纠正:看到不等于看懂,看懂也不等于能改对。但有一条是硬道理:不能把秘密放在前端。代码可以写得漂亮、可以打包压缩,但任何安全判断都必须在服务器端再做一遍。
自测三问(点开对答案) 1. 为什么说 TypeScript 和 JavaScript 是同一条流水线的两头? —— 因为**写的时候是 TypeScript,跑的时候是 JavaScript**。类型检查发生在写完之后、上线之前;浏览器拿到的仍然是编译后的 JavaScript。**所以它们不是竞争关系——一个负责写对的把握,一个负责跑起来。** 2. 浏览器端为什么几十年只有一门语言? —— 因为**浏览器这个环境只实现了这一门**。这不是技术做不到,而是路径依赖的结果:一旦所有网站都写它,改成本就高到没人愿意动。**代价是这一门语言的历史包袱,全体开发者都得一起背**——所以它每被批评一次,就得自己往前挪一步。 3. 2025 年的榜单变化说明了什么? —— **说明新增代码的写法变了,不是运行时的现实变了**。榜首看的是【谁在写新代码】,而真正在用户设备上跑的还是 JavaScript。**看这类排名时一定要分清是【写得多的】还是【跑得多的】**——它们经常是两件事。

相关笔记