JavaScript和Java有什么区别?

76

JavaScript 和 Java 有什么不同?

15个回答

573

Java和Javascript的相似之处就像汽车和地毯的相似之处一样。


11
很遗憾,我不能声明这是原创。不过,我不记得我最初是在哪里听到的了。 - Greg Hewgill
11
我更喜欢有关火腿和仓鼠的版本。 - Kuba Suder

408

一种基本上是玩具,专门用于编写小段代码,传统上被不熟练的程序员使用和滥用。

另一种是用于网页浏览器的脚本语言。


188

以下是这两种语言之间的一些区别:

  • Java是静态类型语言,JavaScript是动态类型语言。
  • Java基于类(class-based),而JavaScript基于原型(prototype-based)。
  • Java构造函数是特殊函数,只能在对象创建时调用;JavaScript的“构造函数”只是标准函数。
  • Java要求所有非块级语句以分号结尾;JavaScript在某些行末插入分号。
  • Java使用基于块的作用域,而JavaScript使用基于函数的作用域。
  • Java有一个非静态方法的隐式this作用域和隐式类作用域;JavaScript有隐式全局作用域。

以下是我认为JavaScript的一些特点:

  • JavaScript支持闭包;Java可以使用匿名类来模拟“闭包”。(真正的闭包可能在未来版本的Java中得到支持。)
  • 所有JavaScript函数都是可变参数的;只有明确标记的Java函数才是可变参数的。
  • JavaScript原型可以在运行时重新定义,并立即对所有引用该原型的对象生效。Java类无法以影响任何现有对象实例的方式被重新定义。
  • JavaScript允许对象中的方法独立于其原型重定义(类似于Ruby中的特殊类,但更强大);Java对象中的方法绑定于其类,并且无法在运行时被重新定义。

8
两年晚了,但是非常感谢这个周到的解释。我认为它比被选中的答案更有用和信息丰富,应该得到更多的赞同票。 - Eric Hu
2
在这种情况下,我会点赞两个。我们需要正确的答案,但是天哪,像我们这样的极客真的需要更多这样的幽默感。 - Michael Durrant
你可能也会听到强类型和弱类型的说法,而不是静态类型和动态类型。 - San

51

请查看 维基百科链接

JavaScript与Java编程语言名字相似,但两者本质上无关。尽管二者具有相同的C语法,并且JavaScript复制了许多Java名称和命名惯例。该语言最初被命名为“LiveScript”,但在Netscape和Sun的共同营销协议中更名,以交换Netscape捆绑Sun的Java运行时环境与当时主导的浏览器。JavaScript内部的关键设计原则来自Self和Scheme编程语言。


38

一切。

JavaScript的名称由网景公司命名,旨在混淆不知情的人认为它与当时热门的Java有关,而这个目标得到了实现。

这两种语言是完全不同的。


8
Javascript 最初被称为 Livescript,如果它们没有更名的话,今天世界可能会更美好! - Greg Hewgill
2
我怀疑这不是为了制造混乱 - 公司有什么好处呢?我猜测目的是要借Java的成功之风,尽管效果却如你所说。 - paxdiablo
2
Sun再次运用这一命名技巧,推出了“Sun Java桌面版”。实际上,它只是GNOME的一个品牌版本,与Java毫无关系。 - Dan Dyer
1
是的,它起作用了。@Greg Hewgill,世界可能会更美好,但JavaScript可能不会达到今天的地步。 - Dan Rosenstark
他们更改名称的原因是在某种程度上安抚当时与Netscape有关系的Sun公司。 - Toby Allen
显示剩余3条评论

24

1
你认为火腿是从哪里来的? ;) - Bill the Lizard
它来自一只大仓鼠;它非常大,以至于你可能会把它和猪混淆。 ;) - apaderno

23

JavaScript是一种面向对象的脚本语言,允许您创建动态的HTML页面,并能够在浏览器中处理输入数据并维护数据。

Java是一种编程语言,核心库和虚拟机平台,允许您创建编译后可以在几乎所有平台上运行的程序,而无需分发其原始形式的源代码或重新编译。

虽然两者名称相似,但它们实际上是两种完全不同的编程语言/模型/平台,用于解决完全不同的问题集。

此外,这直接来自维基百科JavaScript文章:

一个常见的误解是JavaScript与Java类似或密切相关;事实并非如此。二者都具有类C语言的语法,都是面向对象的,通常被沙箱化并广泛用于客户端Web应用程序,但相似之处就到这里了。Java具有静态类型; JavaScript的类型是动态的(意味着变量可以保存任何类型的对象并且无法受限制)。 Java从已编译的字节码加载; JavaScript作为人类可读代码加载。 C是它们的最后一个共同祖先语言。


2
JavaScript不仅适用于HTML页面,Java6现在也包括它,BIRT使用它进行报告脚本编写 - 我相信除了这两个之外,还有其他非HTML的用途。 - paxdiablo
你说得对。随着Rhino的发展以及你提到的其他一些进展,Javascript已经远离浏览器沙盒了。 - Bill the Lizard
2
脚本编程只是编程的一种形式...相反,你应该说Java是一种编译型编程语言,而JavaScript是一种脚本或解释型编程语言。 - Blacktiger

17

除了它们是完全不同的编程语言之外,在我的经验中:

  • Java一开始看起来很好,后来会变得很烦人。
  • JavaScript一开始看起来很糟糕和无望,但渐渐地你真的开始喜欢它。

(但这可能只是因为我更喜欢函数式编程而不是面向对象编程... ;)


14

一切。它们是不相关的编程语言。


“胳膊上的拳头”。根据维基百科,在你咒我之后,在我能再次开口之前,我必须这样做。http://en.wikipedia.org/wiki/Jinx - ddaa
2
你读错了 - 现在我可以打你了。还有给我拿可乐。 - Kirk Strauser

8

这两种语言是具有无关系谱的独立语言。Brendan Eich最初在Netscape创建了JavaScript,最开始它被称为Mocha。将JavaScript命名为一种“Java”编程语言则是向当时正在风靡的Sun公司的Patrick Naughton和James Gosling等人致敬。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接