JavaScript 与 Java 是世界上最为流行的两种编程语言。在软件开发行业分析公司 RedMonk 发布的编程语言排行榜中,JavaScript 与 Java 长期占据榜首第一、第二的位置(第三名是 Python)。这两种编程语言不仅排名接近,名称也很相似,那么它们有什么关系,相互间又有什么区别?在这篇文章里我们就来详细比较一下这两门编程语言。通过这种比较,家长或学习少儿编程的孩子们可以加深对这两种编程语言的了解,在选择少儿编程编程语言时做到心中有数。

RedMonk 发布的编程语言排行榜中,JavaScript、Java 与 Python 名列榜首

有网友形容 Java 与 JavaScript 的关系,就像「雷锋」与「雷锋塔」的关系。虽然名字里都含有「Java」,但这两种编程语言实际却差别很大。下面我们就来详细比较一下这两种编程语言。本文内容包含以下几个部分:

1. Java 与 JavaScript 的诞生
2. 解释型 vs 编译型
3. 数据类型检查
4. 可能的误解
5. 基于类 vs 基于原型
6. 平台独立性的区别
7. Java 与 JavaScript 的不同用途
8. 结论

1. Java 与 JavaScript 的诞生

Java 和 JavaScript 的第一个区别与这两种编程语言出现的时间有关系。Java 是首先出现的,虽然这个时间上领先的优势并没有保持多久。

Java 编程语言项目开始于 1991 年,由 Sun 公司的工程师专门为家电产品上的嵌入式应用开发创建的。在最初的项目里,他们原本想用当时已经成熟的 C++ 进行开发, 但 C++ 程序对于硬件资源极其匮乏的嵌入式系统来说过于复杂和庞大,并且有一个很大的问题是不支持跨平台运行。

为了解决这个问题,工程师们对 C++ 进行了改造,去除了在 C++ 里的一些不太实用及影响安全的部分,并结合嵌入式系统的实时性要求,开发了这种称为 Java 的面向对象编程语言。这也是 Java 与 C++ 很多方面相似的原因。

Java 最初也不叫 Java,而是叫 Oak。只是这个名字已经在另一家公司注册了,它的缔造者们因为有人在喝一杯「 Java 」咖啡时无意提到了「Java」这个词将其重新命名为 Java,并在 1995 年发布了第一个版本。在这之后这门编程语言很快就流行起来了。因为它是基于 C++ 语法风格的,而这种语法为当时很多开发人员所熟悉;而且它还具有 「只编写一次,在任何地方都可以运行」的跨平台支持的特点,这相比 C++ 在很多使用场景下有很大的优势。

Java vs JavaScript - Logo of java
Java 的 logo 是一杯咖啡

在 Java 发布的同一年,当时最大的网页浏览器公司 Netscape 决定为业余程序员「scripters」编写一种新的语言,以吸引更多的编码新手而不是专业人员参与到开发中来。它应该是一种客户端语言,在浏览器中运行,并且不需要任何专用软件就能使用。他们想设计出一种语言,看起来像 Java,但要比 Java 简单。为此一位名为 Brendan Eich 的开发人员神奇的在十天内编写出了这门新语言的原型,并将这门语言命名为「JavaScript」。

Brendan Eich - JavaScript 发明者

为什么要取这样一个看起来跟 Java 很有关系的名字(并且还需要得到 Sun 的授权)?现在我们有理由相信这可能纯粹是为了宣传。虽然 Netscape 最初确实有创建「看起来像 Java」这样一门编程语言的意图,但是完全不同的使用目的,导致了这两门编程语言在很多方面根本上的不同。JavaScript 在设计时的确参考了 Java 的命名规则,但也仅此而已。

java vs javascript - JS logo
JavaScript

2. 解释型 vs 编译型

在这里我们也可以从性能方面来比较一下 Java 与 JavaScript。但问题是这两种编程语言运行方式完全不同,这导致了两者在这方面并没有多少可比性:Java是一种编译语言,JavaScript 则是一种解释语言。

当我们在编写 Java 代码时,它需要首先被编译成机器代码才可以运行。这种编译后的代码,我们通常无法阅读,但机器可以,Java 虚拟机(JVM)能够轻松地运行它。前面提到的「只编写一次,在任何地方都可以运行」的原则实际上也是通过这一步做到的。编译语言意味着需要重新构建程序,这无疑是一个复杂的过程,需要使用特殊的工具来完成这一点。Java 代码是先编译后运行的,因此多数问题在运行前的编译阶段就会被发现。

而 JavaScript 则是一种脚本语言,这意味着它由一个可读的文本组成。脚本代码将以与编写代码相同的语法逐行执行。在以前,这意味着执行速度会很慢并容易成为一个问题。现在虽然执行方式一样,但运行速度已经不是问题。JavaScript 这种运行方式的不同也就导致了另一个明显的区别:JavaScript 只能在程序运行时检测到错误和发现问题,而不是在此之前。

脚本语言作为纯文本代码还意味着可以使用任何文本编辑器(包括记事本)就可以轻松地编辑修改代码。这对于 JavaScript 是很重要的一个特点。JavaScript 通常需要在浏览器中运行。不同类型不同版本的浏览器、不同类型不同版本的操作系统,意味着 JavaScript 需要具有更大的错误处理潜力,而这显然与「只编写一次,在任何地方都可以运行」的 Java 是不同的。

3. 数据类型检查

在比较 Java 和 JavaScript 时,一个更明显的区别是它们各自检查数据类型的方式。在任何程序中,数据类型检查都是必须的:大多数操作都需要使用特定的数据类型来完成,并且需要确保使用正确的数据类型。使用「类型安全」的程序意味着可以避免大多数的因为类型错误而导致的问题。

在这方面 JavaScript 采用的是动态类型检查,相同的变量可用作不同的类型,这种方式在大多数脚本语言中是常见的。这意味着数据类型的安全性在程序运行时是动态验证的。一方面这可以让编程变得很灵活,并产生一些看起来很强大的语言功能;但另一方面,在程序运行之前,将无法确保它是类型安全的,这可能会导致运行时的错误。

而 Java 采用的则是静态类型检查,所有变量或表达式的类型在编译时就已经完全确定。这意味着在编译期间将能够验证数据类型,并更早地捕获大多数类型错误。并且编译器知道使用的是哪种类型,运行代码时通常可以运行得更快,占用的资源更少。

4. 可能的误解

有人可能认为静态类型检查是编译语言的特点,而动态检查则是解释语言的特点。就很多编程语言的现状来说,这的确是对的。但实际上类型检查与编译语言还是解释语言并没有关系。一门语言可以使用静态或动态类型检查,同样一门语言可以是编译型也可以是解释型。虽然 Java 是编译型,从技术上讲,它也可以使用动态类型检查。

另一个常见的误解是静态类型检查必须在强类型语言中使用。采用强类型的编程语言意味着它具有更高类型安全约束:变量与特定的数据类型相关。但是,系统检查类型的方式跟这个并没有直接关系。

5. 基于类 vs 基于原型

在比较 Java 和 JavaScript 时,需要了解两种编程类型的基本区别。Java 是基于类(class-based)的,将继承和实例化看作两个独立的过程。而 JavaScript 则是基于原型(prototype-based)的,这让 JavaScript 的继承和实例化看起来是一样的。下面我们来解释一下这一点。

在基于类的编程语言(这里的 Java)中,使用某个类来创建对象,但类本身并不是一个对象 —— 它更像一个工具。就像我们用烤盘做通心粉和奶酪,但烤盘本身不能成为你的晚餐。但在基于原型的编程语言(这里的 JavaScript)中,实例化后有了一个原型而不是一个类。这个原型可以被复制或克隆并生成其他对象,但与类不同的是,它本身也是一个对象。

6. 平台独立性的区别

Java 和 JavaScript 的另一大区别是,Java 是一种完全平台独立的编程语言。这意味着它可以单独在任何操作系统上使用:只需要一个 Java 虚拟机。这个虚拟机可以免费下载并安装到电脑上。没有它,将无法在计算机上运行 Java。

而 JavaScript 通常只在 Web 浏览器中使用。当然现在找一台没有浏览器的电脑也很难。然而,这也意味着 JavaScript 的运行强烈依赖于 HTML 和 CSS。HTML 包含Web 页面的结构,CSS 用来操作样式,JavaScript 负责功能实现。光有结构没有功能显然是无用的,而光有功能没有结构,也同样会是一团糟。

可以在浏览器中运行 Java 吗?曾经可以。在以前我们是可以下载并安装 Java 浏览器插件,在网页里加载使用 Java 代码编写的交互式页面内容的。这些被称为 Java 小程序,并曾经得到过广泛的应用。但现在它们几乎已经绝迹了。由于 HTML5 提供了一个将多媒体直接嵌入到网页的功能,这种并不安全的 Java 小程序已无用武之地。

7. Java 与 JavaScript 的不同用途

虽然从技术上讲 Java 和 JavaScript 都可以用于前端和后端开发,但它们有着显著的区别。

Comparing Java vs Javascript

作为一种通用语言,Java 应用范围更广一些。如果要为 Android 系统开发企业软件或应用程序,Java 应该是首选。Java 在金融与贸易领域、大数据以及科学应用等领域都有广泛的应用。很多自然语言处理系统是用 Java 编写的。「只编写一次,在任何地方都可以运行」的特点也使得它非常适合用于嵌入式系统开发,例如 SIM 卡中使用的Java Card。

而 JavaScript 则是为 Web 而生的,它从诞生开始的主要目的就是帮助创建交互式的动态 Web 页面。JavaScript 是完成前端开发需求的最佳选择。JavaScript 适合于电子商务、用户界面(UI)定制和创建各种简单的工具等几乎所有的前端 Web 开发场景。

需要注意的是,现在有很多各种各样的框架和资源库大大扩展了这两种语言的应用场景,不管是 Java 还是 JavaScript 都在不断扩展着自己的应用领域。Java 也被用于 Web 开发。而 JavaScript 也被用于移动应用程序开发,JavaScript 利用 Node.js 框架进行后端开发也有广泛的应用;而 JavaScript 简单轻便的特点,也使得它成为很多年轻公司的一个很好的选择。

8. 结论

在 Java 和 JavaScript 之间没有明显的优胜者。尽管有很多明显的差异,但这两种语言都很流行,都有自己的庞大的用户社区。我们希望通过这样的比较能够帮助初学者更好的理解这两门编程语言。不管是学习少儿编程的孩子还是成年的初学者,在学习一门编程语言或选择一门编程语言前,先对这门语言有一个基本了解都是很有必要的。

更多关于编程语言的介绍,请参考:
少儿编程之编程语言介绍:为什么 Python 对于编程入门学习来说,是一门很棒的语言
少儿编程之编程语言选择:Python 与 C++ 详细比较
少儿编程之编程语言介绍:Python 编程应用情况详细介绍
少儿编程之学习方法介绍:Python 最佳学习方法 通过八个步骤学习 Python 编程
少儿编程之编程语言介绍:HTML 与 HTML5 的区别,HTML5 相比 HTML 有哪些大的改进
少儿编程之学习方法介绍:JavaScript 最佳学习方法 学习 JavaScript 编程的 10 个提示

了解更多校外课课程介绍,请参考:
新用户指南 - 校外课网站编程学习环境及少儿编程课程介绍
Adafruit 可穿戴编程开发主板 - 用户使用指南
离线学习少儿编程,一些不使用电脑也可以学习编程知识的亲子互动游戏

了解更多家庭教育方面的信息,请参考:
家庭教育方法:关于儿童如何学习的背景思考
决定孩子成功的关键是什么?家长应该注重孩子哪些特质的培养?对于孩子的学习,家长应该更注重结果,还是过程?
青少年必备书单:最适合孩子阅读的 100 本经典图书;少儿书单;儿童必读书籍;少儿图书推荐;青少年必读图书

扫码下面二维码,关注我们的公众号,阅读最新文章或观看更多视频教程:

校外课少儿编程 公众号