在我剛學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是靜態語言,是強類型定義語言(類型安全的語言)。