惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
Google DeepMind News
Google DeepMind News
博客园 - 【当耐特】
量子位
博客园 - 司徒正美
爱范儿
爱范儿
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
Jina AI
Jina AI
J
Java Code Geeks
腾讯CDC
大猫的无限游戏
大猫的无限游戏
V
Visual Studio Blog
I
InfoQ
D
Docker
Recent Announcements
Recent Announcements
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
宝玉的分享
宝玉的分享
G
Google Developers Blog
GbyAI
GbyAI
Y
Y Combinator Blog
有赞技术团队
有赞技术团队
H
Help Net Security

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解
Java和JavaScript的关系真是雷峰和雷峰塔的关系吗?
linsk1998 · 2026-05-03 · via 博客园_首页

前端圈一直流传着一个经典段子:Java和JavaScript是什么关系?就是雷峰和雷峰塔的关系。听过后令人会心一笑。但静下来想想🤔,真是这样吗?

什么是雷峰和雷峰塔的关系

雷峰(人)和雷峰塔(建筑)的关系非常明确:除了名字读音相似之外,两者在血缘、历史、物理构成等任何维度上,都百分之百毫无关联。

那么,Java和Javascript是否只是名字有点相似,实则毫无关系呢?

Java和Javascript的关系

如果抛开段子,翻开真实的计算机史,你会发现Java和JavaScript不仅不是“毫无关系”,反而有着千丝万缕的渊源。

Javascript是Sun和Netscape联合发布的,Sun(现在是Oracle)是Javascript的商标持有者。

时间回到1995年,网景公司(Netscape)为了在浏览器里加入交互能力,搞出了一门脚本语言(最初叫Mocha,后改LiveScript)。当时Sun公司推出的Java语言正如日中天,被媒体炒作战无不胜的“神器”。网景为了蹭上这波热度,与Sun公司达成了战略合作,将这门语言正式更名为JavaScript
更硬核的事实是:直到今天,JavaScript的商标权依然掌握在Sun的继承者甲骨文(Oracle)手里。如果是毫无关系的两者,怎么可能共用一个具有法律效力的名字?

JavaScript就是按像Java设计的

网景公司在给语言改名的同时,也给开发者(Brendan Eich)提出了一个明确的需求:“让它的语法看起来像Java”。因此,JavaScript在诞生之初,大量借鉴了Java的基础语法结构。它的 if/else 分支、for 循环结构、try/catch 异常处理机制,甚至是 new 关键字的使用,看起来和Java几乎如出一辙。因此,JavaScript 不是巧合像,是故意设计成像 Java

Java中内置了JavaScript运行时

从JDK 6引入Rhino引擎,到JDK 8内置Nashorn引擎(后在JDK 15中移除),再到如今通过GraalVM JS等现代方案实现深度互操作,Java官方生态长期保持着对JavaScript运行时的支持。这意味着,你完全可以在Java程序里直接调用JavaScript代码,把它们当作业务中的“动态脚本层”。这绝不是两座毫无交集的孤岛,两者在运行层面长期深度集成。

Java脚本化后就是JavaScript的样子

如果说设计一门Java的脚本语言,要类似Java的语法,但是要脚本语言的特性,要能解释执行、方便灵活、宽松,还要高扩展性。那么设计出来就是JavaScript这个样子。

这是一个非常有趣的逻辑推导。假设1995年你需要为Java生态设计一门“附属脚本语言”,你的需求清单是这样的:

  • 融入Java生态:语法必须像Java;
  • 运行机制:不需要编译,直接解释执行,轻量级;
  • 类型系统:不能像Java那么严苛,要宽松、动态,写起来方便;
  • 高扩展性:面对复杂多变的Web环境,必须允许开发者随时往内置类中添加方法;

当你按照这份需求文档写出一门语言时,恭喜你,你重新发明了JavaScript。它从一出生,就是带着“ Java的轻量化脚本兄弟 ”这个定位来的。

JavaScript和Java是两门不同的语言,但是不代表毫无关系。

有些人觉得JavaScript还是不够 “像” Java,比如JavaScript的类的实现是基于原型链的,和Java类有本质不同。对此我想说,脚本语言和编译型的语言本来就是为不同场景设计的。JavaScript和Java的差异确实足够大,大到应当作为两门不同语言分别学习,但是不能否认它们的历史渊源。JavaScript和Java的差异更多的可以用不同场景设计来解释。比如原型链问题,在Java中,你的API更新了,你只要升级JDK;而浏览器环境上应当让内置类有较高的扩展性,原型链无疑是最优解,让你重新设计一遍Javascript你也会设计成这样。

总结

Java 和 JavaScript 并非毫无关系,把它俩比作雷锋和雷峰塔,实在是冤枉了这两门语言。它俩的关系更接近于 VB 和 VBScript 的关系:VB 是微软推出的完整版编译型语言,适合开发大型桌面应用,VBScript 则是基于 VB 语法设计的轻量级脚本语言,灵活简洁,用于自动化、网页脚本,二者语法同源、定位互补,是同体系下不同分工的语言。

微软推出JScript

故事的走向在浏览器大战时期变得更加复杂。微软为了让自家的Internet Explorer浏览器兼容已有网站,迅速搞出了一个 JScript。JScript虽然名字刻意避开了“Java”字眼,但就是为了兼容JavaScript而生的,可以看作微软的JavaScript。但由于JavaScript并非开放标准,微软是照着Netscape的JavaScript行为猜着做的,只能仿个大概,对边界场景可能存在不一致。

EcmaScript出现

为了推动Web标准化,1996年,网景将JavaScript提交给了欧洲计算机制造商协会(ECMA)进行标准化。第二年,ECMA出台了ECMA-262标准,这便是大名鼎鼎的 ECMAScript(简称ES)。

从此,技术界有了一个清晰的共识:JScript和JavaScript,本质上都只是ECMAScript标准的不同实现。 这个标准的诞生,把JavaScript从网景和微软的商业战中抽离出来,成为了一门真正开放的语言。

近年来ES朝着越来越不像Java的方向发展

随着Web标准化,ECMAScript已经不是Sun或Oracle可以控制的。如今ECMAScript的更新由TC39委员会主导,采用五阶段提案流程。如今ECMAScript的发展已经偏离的像Java的目的,比如Map/Set的API刻意避开了Java的命名规范。ES刻意都划清了界限。这导致JavaScript作为ES最核心的实现,如今越来越不像Java。

因此我更愿意把现在的js叫es,而不是否定Javascript和Java的关系

我知道有些人极度反感Java,甚至否定Javascript和Java的关系。对于这种掩耳盗铃的行为,我倒有个建议:既然这么嫌弃,不如彻底抛弃“JavaScript”这个带Java基因的名字,以后只准叫它ECMAScript。叫它ES,确实是对它如今独立设计哲学的最好宣告,证明它不再是任何人的附庸。也顺理成章地把“JavaScript”这个名字,留给那些真正需要“Java脚本化”的人。