Java 和 JavaScript 的區(qū)別

很多人看到 Java 和 JavaScript 都有“Java”四個(gè)字,就以為它們是同一樣?xùn)|西含潘,連我自己當(dāng)初也是這樣饲做。

其實(shí)它們是完完全全不同的兩種東西。

Java调鬓,全稱應(yīng)該是 Java Applet艇炎,是嵌在網(wǎng)頁(yè)中酌伊,而又有自己獨(dú)立的運(yùn)行窗口的小程序腾窝。

Java Applet 是預(yù)先編譯好的,一個(gè)Applet 文件(.class)用 Notepad 打開閱讀居砖,根本不能理解虹脯。Java Applet 的功能很強(qiáng)大,可以訪問 http奏候、ftp等協(xié)議循集,甚至可以在電腦上種病毒(已有先例了)。

相比之下蔗草,JavaScript 的能力就比較小了咒彤。JavaScript 是一種“腳本”(“Script”),它直接把代碼寫到 HTML文檔中咒精,瀏覽器讀取它們的時(shí)候才進(jìn)行編譯镶柱、執(zhí)行,所以能查看 HTML 源文件就能查看JavaScript 源代碼模叙。JavaScript 沒有獨(dú)立的運(yùn)行窗口歇拆,瀏覽器當(dāng)前窗口就是它的運(yùn)行窗口。

它們的相同點(diǎn)范咨,我想只有同是以 Java 作編程語(yǔ)言一點(diǎn)了故觅。




因?yàn)楦杏X如果一上來就是各種細(xì)節(jié),我自己都會(huì)受不了渠啊,所以先來個(gè)籠統(tǒng)的描述输吏,說下 JavaScript 與 Java 的不同之處。當(dāng)然替蛉,是我個(gè)人的理解贯溅,基于個(gè)人并不淵博的知識(shí)和經(jīng)驗(yàn)哈。

當(dāng)然灭返,因?yàn)橐谝粋€(gè)環(huán)境里面執(zhí)行嘛盗迟,所以可以打開記事本,寫個(gè) HTML 頁(yè)面熙含,把這個(gè)放到一個(gè) 標(biāo)簽中罚缕,然后再用瀏覽器打開這個(gè)本地 HTML 文檔,然后....好吧怎静,的確繁瑣邮弹。

好吧黔衡,我來說個(gè)稍微簡(jiǎn)單的方法,請(qǐng)打開一個(gè)現(xiàn)代瀏覽器腌乡。哦盟劫,對(duì)吼,你現(xiàn)在就應(yīng)該是開著一個(gè)瀏覽器与纽,不過是否“現(xiàn)代”呢就不好說侣签。通常,在前端領(lǐng)域急迂,經(jīng)常會(huì)吐槽 IE 瀏覽器(嗯影所,就是 Windows 操作系統(tǒng)自帶的那個(gè)瀏覽器),由于版本更新時(shí)間較長(zhǎng)僚碎,所以 bug 修復(fù)比其他瀏覽器慢猴娩,而且很多時(shí)候(主要是指老版本)自成體系,與其他瀏覽器陣營(yíng)區(qū)別較大勺阐,以及等等原因卷中,反正就是不被一些人喜愛≡ǔ椋可又因?yàn)槭褂萌巳禾珡V泛蟆豫,特別是在中國(guó),所以被吐槽得較多腰吟。哎无埃,我本來不是在講 Helloworld 的嗎?回正題毛雇。

以我現(xiàn)在在用的 Firefox 來說嫉称,可以通過 Ctrl + Shift + K 來打開瀏覽器的控制臺(tái),然后你可以把上面的那個(gè) JavaScript 代碼復(fù)制到輸入框里灵疮,然后回車執(zhí)行织阅。據(jù)我所知,Chrome 可以通過 F12 打開控制臺(tái)震捣,IE 也是 F12荔棉,不過低版本貌似不支持輸入腳本執(zhí)行好像。反正你有興趣就自己試試吧蒿赢。

喜歡折騰的朋友润樱,可以裝個(gè) NodeJS(其實(shí)真心不麻煩的,從搜索開始吧)羡棵,然后在 NodeJS 環(huán)境里也可以輸入上面的代碼執(zhí)行的壹若。哦,不對(duì)!我錯(cuò)了店展,NodeJS 下面會(huì)報(bào)錯(cuò)的Qā!赂蕴!因?yàn)樯读驗(yàn)?JavaScript 語(yǔ)言實(shí)際上就根本沒有提供對(duì)輸入輸入的支持!8潘怠碧注!而那個(gè) alert() 函數(shù)(叫方法也行)實(shí)際上是瀏覽器的運(yùn)行環(huán)境下通常提供的一個(gè)函數(shù)。那么怎么在 NodeJS 下輸出 “Hello, world!” 呢席怪,好吧应闯,你直接輸入帶引號(hào)的 "Hello, world!"(這里我特意把引號(hào)換成了半角的,嚴(yán)謹(jǐn)挂捻,有木有)然后回車就好了....

咦,不是要說“類”的事的嘛船万,對(duì)吼刻撒。

JavaScript 也是面向?qū)ο蟮模前」⒌迹F(xiàn)在誰(shuí)要不是面向?qū)ο蟮亩疾缓靡馑汲鲩T声怔。但是 JavaScript 并沒有提供類(盡管 JavaScript 中 class 是個(gè)暫時(shí)沒有使用的關(guān)鍵字,而且下個(gè)版本的 JavaScript 中很可能就會(huì)用上這個(gè)關(guān)鍵字啦舱呻,但那是以后醋火。PS:我為啥總是這么嚴(yán)謹(jǐn),備注有些多啊箱吕。唉芥驳,處女座....),也沒有那么正統(tǒng)的一套基于類的繼承機(jī)制茬高,以及什么 static, public, protected, private 等等這些東東(盡管其中好多也是沒有用到的關(guān)鍵字兆旬,也就是說不能拿來作為變量名)。所以怎栽,僅這一點(diǎn)就讓 Java 程序員大跌眼鏡了吧丽猬!你肯定想說,就這也敢說是面向?qū)ο笱椋拷潘睿〔贿^,因?yàn)槟阋呀?jīng)寫過 JavaScript 代碼了强饮,你更可能會(huì)說由桌,啊,JavaScript 還面向?qū)ο螅浚?/p>

是的沥寥,學(xué)術(shù)上講(咳咳)碍舍,JavaScript 是面向“原型”(prototype)的,可以認(rèn)為是另一支面向?qū)ο蟮木幊陶Z(yǔ)言家族吧邑雅。原型片橡,簡(jiǎn)單來說,就是一個(gè)對(duì)象是另一個(gè)對(duì)象的原型淮野,于是后面的對(duì)象就可以繼承原型對(duì)象的屬性捧书、方法啦。呵呵骤星,其實(shí)挺簡(jiǎn)單经瓷。不過,如果要是刻意模仿 Java 中的模式洞难,在 JavaScript 中定義可復(fù)用的“類”舆吮,再實(shí)現(xiàn)繼承之類的東東,就會(huì)搞得很累队贱,很累色冀。所以,倒不如一開始就接受 JavaScript 是和 Java 不同的柱嫌,沒有類锋恬,但也能實(shí)現(xiàn)面向?qū)ο蟮奶匦浴?/p>

再次強(qiáng)調(diào),盡管在 JavaScript 中有這樣的寫法编丘,例如:

varnow =newDate();now.getFullYear();// 得到當(dāng)前年份 2014

實(shí)際上与学,Date 不是一個(gè)類哦。認(rèn)真點(diǎn)跟你說的話嘉抓,它是個(gè)“函數(shù)”(Function)索守。

在設(shè)計(jì) JavaScript 的時(shí)候,那個(gè)家伙故意搞了這種類似創(chuàng)建類的實(shí)例的語(yǔ)法掌眠,但實(shí)際上理解起來很繞蕾盯。這里我就不再說這個(gè)梗(geng,還有拼音蓝丙,多貼心)啦级遭,應(yīng)該會(huì)再寫文章詳細(xì)講的。

盡管不是嚴(yán)格意義上的(你問我為什么不是嚴(yán)格意義上的渺尘,我也就是說說挫鸽,好商量嘛)函數(shù)式編程語(yǔ)言,但 JavaScript 中的確是有很多函數(shù)式編程語(yǔ)言的特性鸥跟,例如函數(shù)是第一性的丢郊。其實(shí)上一句話有點(diǎn)學(xué)術(shù)啦盔沫,我忘了從哪里看的了》阖遥總之架诞,“函數(shù)”在 JavaScript 里面非常非常重要就是了,甚至可以說理解了 JavaScript 里的函數(shù)干茉,也就理解了 JavaScript 眾多千奇百怪的東東的核心啦谴忧。

因?yàn)槭悄?JavaScript 和 Java 進(jìn)行比較,所以我覺得最大的不同在于 JavaScript 中沒有類角虫,因?yàn)槊菜祁愂?Java 中很重要的一個(gè)東西(說得偏差太大請(qǐng)參考第一篇的“免責(zé)說明”^_^)沾谓。但如果只是講 JavaScript 本身,拋開你有 Java 背景這件事戳鹅,我認(rèn)為函數(shù)的確是 JavaScript 最重要均驶,最需要搞清楚的東西。

把類和函數(shù)放在一起枫虏,JavaScript 給出了一種用函數(shù)來模擬類的定義的方式妇穴,例如:

functionPerson(name){this.name = name;this.toString =function(){returnthis.name; }}varme =newPerson("luobo");me.toString();// "luobo"

以上代碼,你現(xiàn)在就可以復(fù)制到“現(xiàn)代”瀏覽器的控制臺(tái)執(zhí)行(或者輸入到 NodeJS 控制臺(tái)執(zhí)行)模软。

我真的不想現(xiàn)在就來仔細(xì)說明上面這段代碼中 Person 函數(shù)是怎么回事伟骨,因?yàn)檫@一段代碼涉及很多:函數(shù)、原型燃异、構(gòu)造函數(shù),一兩句話說不清继蜡,就像我曾經(jīng)花一兩個(gè)小時(shí)思考也不會(huì)立馬搞清楚一樣(呃回俐,現(xiàn)在算是有些明白了,所以才敢拿出來“現(xiàn)”跋〔ⅰ)仅颇。不過,要記住碘举,上面沒有“類”忘瓦,只有函數(shù)。

吼吼引颈,寫了這么多耕皮,打住。以上就是我理解的 JavaScript 與 Java 的最大的不同蝙场,諸如語(yǔ)法凌停、語(yǔ)言特性等各種細(xì)節(jié),慢慢再來說嘍售滤。

PS:感覺我寫東西口氣挺輕松吼罚拟,其實(shí)我是個(gè)嚴(yán)肅的人-_-台诗。

文/luobo_tang(簡(jiǎn)書作者)

原文鏈接:http://www.reibang.com/p/8488d306bae9

著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)赐俗,并標(biāo)注“簡(jiǎn)書作者”拉队。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市阻逮,隨后出現(xiàn)的幾起案子粱快,更是在濱河造成了極大的恐慌,老刑警劉巖夺鲜,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皆尔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡币励,警方通過查閱死者的電腦和手機(jī)慷蠕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來食呻,“玉大人流炕,你說我怎么就攤上這事〗霭” “怎么了每辟?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)干旧。 經(jīng)常有香客問我渠欺,道長(zhǎng),這世上最難降的妖魔是什么椎眯? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任挠将,我火速辦了婚禮,結(jié)果婚禮上编整,老公的妹妹穿的比我還像新娘舔稀。我一直安慰自己,他們只是感情好掌测,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布内贮。 她就那樣靜靜地躺著,像睡著了一般汞斧。 火紅的嫁衣襯著肌膚如雪夜郁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天断箫,我揣著相機(jī)與錄音拂酣,去河邊找鬼。 笑死仲义,一個(gè)胖子當(dāng)著我的面吹牛婶熬,可吹牛的內(nèi)容都是我干的剑勾。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼赵颅,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼虽另!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起饺谬,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤捂刺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后募寨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體族展,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年拔鹰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仪缸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡列肢,死狀恐怖恰画,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瓷马,我是刑警寧澤拴还,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站欧聘,受9級(jí)特大地震影響片林,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜怀骤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一拇厢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晒喷,春花似錦、人聲如沸访敌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)寺旺。三九已至爷抓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阻塑,已是汗流浹背蓝撇。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陈莽,地道東北人渤昌。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓虽抄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親独柑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子迈窟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • Java是一個(gè)支持并發(fā)、基于類和面向?qū)ο蟮挠?jì)算機(jī)編程語(yǔ)言忌栅。下面列出了面向?qū)ο筌浖_發(fā)的優(yōu)點(diǎn): 代碼開發(fā)模塊化车酣,更易...
    安安靜靜寫代碼閱讀 1,094評(píng)論 0 8
  • Java 面試題 整理自藕保客網(wǎng) 什么是Java虛擬機(jī)?為什么Java被稱作是“平臺(tái)無關(guān)的編程語(yǔ)言”瑞驱? Java虛擬...
    GuaKin_Huang閱讀 10,665評(píng)論 19 265
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法娘摔,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法钱烟,繼承相關(guān)的語(yǔ)法晰筛,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,603評(píng)論 18 399
  • 剛剛畢業(yè)那會(huì)般哼,青春年少吴汪。以為只要姿態(tài)放的足夠低,態(tài)度足夠謙遜蒸眠,為人足夠有眼色漾橙,終歸是可以融入職場(chǎng)的。現(xiàn)在想想真是少...
    云水琉璃閱讀 1,318評(píng)論 0 1
  • 我跟我老公第一次見面時(shí)是15年前蒋腮,我上高中淘捡,他好像剛上初一吧,一個(gè)在北一個(gè)在南池摧,我是四川人焦除,他是東北人,因?yàn)槲腋改?..
    糖圖圖閱讀 205評(píng)論 0 1