在我刚学Javascript的时候,舍友看到了我的犀牛书,然后弱弱问了我一句:Java和Javascript有啥关系?
我记得自己好像是知道来着,怎么就说不清楚呢?于是为了扳回面子,我就这个问题仔细查阅了一圈,终于觉得自己搞清楚了,写在这长个记性。
先上图
,
刚开始,我看到这个答案的时候,觉得我终于看到了背后的关系,但是,看了多年柯南的直觉告诉我并没有这么简单,我都不服。
其实,他们的孽缘,从Javascript诞生那天就发生了。
历史
1995年Sun公司将Oak语言改名为Java,正式向市场推出。Sun公司大肆宣传,许诺这种语言可以"一次编写,到处运行"(Write Once, Run Anywhere),它看上去很可能成为未来的主宰。
网景公司动了心,决定与Sun公司结成联盟。它不仅允许Java程序以applet(小程序)的形式,直接在浏览器中运行;甚至还考虑直接将Java作为脚本语言嵌入网页,只是因为这样会使HTML网页过于复杂,后来才不得不放弃。
总之,当时的形势就是,网景公司的整个管理层,都是Java语言的信徒,Sun公司完全介入网页脚本语言的决策。因此,Javascript后来就是网景和Sun两家公司一起携手推向市场的,这种语言被命名为"Java+script"并不是偶然的。
1995年5月,网景公司做出决策,未来的网页脚本语言必须"看上去与Java足够相似",但是比Java简单,使得非专业的网页作者也能很快上手。Brendan Eich被指定为这种"简化版Java语言"的设计师。
区别于共性
相同之处:
- 它们的语法和 C 语言都很相似;
- 它们都是面向对象的(虽然实现的方式略有不同);
- JavaScript 在设计时参照了 Java 的命名规则;
- 都是解释型语言(非编译型)
不同之处:
- JavaScript 是动态类型语言,而 Java 是静态类型语言;
- JavaScript 是弱类型的,Java 属于强类型;
- JavaScript 的面向对象是基于原型的(prototype-based)实现的,Java 是基于类(class-based)的;
- 语言风格相去甚远。JavaScript 在设计时所参考的对象不包括 Java,而包括了像 Self 和 Scheme 这样的语言。
总结一下,他们既不是半毛钱关系没有,也不是有几毛钱的关系,当然,他们最重要的联系就是总有人把它们两个放到一起。
当然,如果你懒得说,可以拿图去用
补充理解
关于动态语言和静态语言
通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。
记住:Static typing when possible, dynamic typing when needed。
动态类型语言:在用动态类型的语言编程时,永远也不用给任何变量指定数据类型
静态类型语言:写程序时要声明所有变量的数据类型.例如Java,C++,C#等
关于强类型定义语言和弱类型定义语言
(1)强类型定义语言:一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。强类型定义语言是类型安全的语言。
(2)弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。
强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言); VBScript是动态语言,是弱类型定义语言(类型不安全的语言); JAVA是静态语言,是强类型定义语言(类型安全的语言)。