JavaScript 與 Java 的不同

剛寫完開篇,緊接著厚著臉皮開始寫這篇跌帐。

因為感覺如果一上來就是各種細(xì)節(jié)首懈,我自己都會受不了,所以先來個籠統(tǒng)的描述谨敛,說下 JavaScript 與 Java 的不同之處究履。當(dāng)然,是我個人的理解脸狸,基于個人并不淵博的知識和經(jīng)驗哈璃弄。

JavaScript 與 Java 最大的不同是:JavaScript 中沒有類(class)0!!

我曾經(jīng)自學(xué)過 Java下硕,第一個 HelloWorld 程序就要寫在類里面,再整個 main 方法(貌似是吧)寺庄。然而俐巴,對于 JavaScript,如果你想也來個 HelloWorld 的話牵囤,可以這樣:

alert("Hello, world!")

當(dāng)然爸黄,因為要在一個環(huán)境里面執(zhí)行嘛滞伟,所以可以打開記事本,寫個 HTML 頁面炕贵,把這個放到一個 <script> 標(biāo)簽中梆奈,然后再用瀏覽器打開這個本地 HTML 文檔,然后....好吧称开,的確繁瑣亩钟。

好吧,我來說個稍微簡單的方法鳖轰,請打開一個現(xiàn)代瀏覽器清酥。哦,對吼蕴侣,你現(xiàn)在就應(yīng)該是開著一個瀏覽器焰轻,不過是否“現(xiàn)代”呢就不好說。通常昆雀,在前端領(lǐng)域辱志,經(jīng)常會吐槽 IE 瀏覽器(嗯,就是 Windows 操作系統(tǒng)自帶的那個瀏覽器)狞膘,由于版本更新時間較長揩懒,所以 bug 修復(fù)比其他瀏覽器慢,而且很多時候(主要是指老版本)自成體系挽封,與其他瀏覽器陣營區(qū)別較大旭从,以及等等原因,反正就是不被一些人喜愛场仲『驮茫可又因為使用人群太廣泛,特別是在中國渠缕,所以被吐槽得較多鸽素。哎,我本來不是在講 Helloworld 的嗎亦鳞?回正題馍忽。

以我現(xiàn)在在用的 Firefox 來說,可以通過 Ctrl + Shift + K 來打開瀏覽器的控制臺燕差,然后你可以把上面的那個 JavaScript 代碼復(fù)制到輸入框里遭笋,然后回車執(zhí)行。據(jù)我所知徒探,Chrome 可以通過 F12 打開控制臺瓦呼,IE 也是 F12,不過低版本貌似不支持輸入腳本執(zhí)行好像测暗。反正你有興趣就自己試試吧央串。

喜歡折騰的朋友磨澡,可以裝個 NodeJS(其實真心不麻煩的,從搜索開始吧)质和,然后在 NodeJS 環(huán)境里也可以輸入上面的代碼執(zhí)行的稳摄。哦,不對饲宿!我錯了厦酬,NodeJS 下面會報錯的!L毕搿仗阅!因為啥,因為 JavaScript 語言實際上就根本沒有提供對輸入輸入的支持5钔小E铡剧蚣!而那個 alert() 函數(shù)(叫方法也行)實際上是瀏覽器的運行環(huán)境下通常提供的一個函數(shù)支竹。那么怎么在 NodeJS 下輸出 “Hello, world!” 呢,好吧鸠按,你直接輸入帶引號的 "Hello, world!"(這里我特意把引號換成了半角的礼搁,嚴(yán)謹(jǐn),有木有)然后回車就好了....

咦目尖,不是要說“類”的事的嘛馒吴,對吼。

JavaScript 也是面向?qū)ο蟮纳前∫粒F(xiàn)在誰要不是面向?qū)ο蟮亩疾缓靡馑汲鲩T。但是 JavaScript 并沒有提供類(盡管 JavaScript 中 class 是個暫時沒有使用的關(guān)鍵字洞拨,而且下個版本的 JavaScript 中很可能就會用上這個關(guān)鍵字啦扯罐,但那是以后。PS:我為啥總是這么嚴(yán)謹(jǐn)烦衣,備注有些多啊歹河。唉,處女座....)花吟,也沒有那么正統(tǒng)的一套基于類的繼承機(jī)制秸歧,以及什么 static, public, protected, private 等等這些東東(盡管其中好多也是沒有用到的關(guān)鍵字,也就是說不能拿來作為變量名)衅澈。所以键菱,僅這一點就讓 Java 程序員大跌眼鏡了吧!你肯定想說今布,就這也敢說是面向?qū)ο笊闯埽堪盘荩〔贿^,因為你已經(jīng)寫過 JavaScript 代碼了弄喘,你更可能會說玖喘,啊,JavaScript 還面向?qū)ο竽⒅荆浚?/p>

是的累奈,學(xué)術(shù)上講(咳咳),JavaScript 是面向“原型”(prototype)的急但,可以認(rèn)為是另一支面向?qū)ο蟮木幊陶Z言家族吧澎媒。原型,簡單來說波桩,就是一個對象是另一個對象的原型戒努,于是后面的對象就可以繼承原型對象的屬性、方法啦镐躲。呵呵储玫,其實挺簡單。不過萤皂,如果要是刻意模仿 Java 中的模式撒穷,在 JavaScript 中定義可復(fù)用的“類”,再實現(xiàn)繼承之類的東東裆熙,就會搞得很累端礼,很累。所以入录,倒不如一開始就接受 JavaScript 是和 Java 不同的蛤奥,沒有類,但也能實現(xiàn)面向?qū)ο蟮奶匦浴?/p>

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

var now = new Date();
now.getFullYear(); // 得到當(dāng)前年份 2014

實際上,Date 不是一個類哦贫奠。認(rèn)真點跟你說的話唬血,它是個“函數(shù)”(Function)。

在設(shè)計 JavaScript 的時候唤崭,那個家伙故意搞了這種類似創(chuàng)建類的實例的語法拷恨,但實際上理解起來很繞。這里我就不再說這個梗(geng谢肾,還有拼音腕侄,多貼心)啦,應(yīng)該會再寫文章詳細(xì)講的。

盡管不是嚴(yán)格意義上的(你問我為什么不是嚴(yán)格意義上的冕杠,我也就是說說微姊,好商量嘛)函數(shù)式編程語言,但 JavaScript 中的確是有很多函數(shù)式編程語言的特性分预,例如函數(shù)是第一性的兢交。其實上一句話有點學(xué)術(shù)啦,我忘了從哪里看的了笼痹∨湓總之,“函數(shù)”在 JavaScript 里面非常非常重要就是了凳干,甚至可以說理解了 JavaScript 里的函數(shù)晴裹,也就理解了 JavaScript 眾多千奇百怪的東東的核心啦。

因為是拿 JavaScript 和 Java 進(jìn)行比較救赐,所以我覺得最大的不同在于 JavaScript 中沒有類涧团,因為貌似類是 Java 中很重要的一個東西(說得偏差太大請參考第一篇的“免責(zé)說明”_)。但如果只是講 JavaScript 本身经磅,拋開你有 Java 背景這件事泌绣,我認(rèn)為函數(shù)的確是 JavaScript 最重要,最需要搞清楚的東西馋贤。

把類和函數(shù)放在一起赞别,JavaScript 給出了一種用函數(shù)來模擬類的定義的方式畏陕,例如:

function Person(name)  {
    this.name = name;
    this.toString = function () { return this.name; }
}

var me = new Person("luobo");
me.toString(); // "luobo"

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

我真的不想現(xiàn)在就來仔細(xì)說明上面這段代碼中 Person 函數(shù)是怎么回事惠毁,因為這一段代碼涉及很多:函數(shù)犹芹、原型、構(gòu)造函數(shù)鞠绰,一兩句話說不清腰埂,就像我曾經(jīng)花一兩個小時思考也不會立馬搞清楚一樣(呃,現(xiàn)在算是有些明白了蜈膨,所以才敢拿出來“現(xiàn)”坝炝)。不過翁巍,要記住驴一,上面沒有“類”,只有函數(shù)灶壶。

吼吼肝断,寫了這么多,打住。以上就是我理解的 JavaScript 與 Java 的最大的不同胸懈,諸如語法担扑、語言特性等各種細(xì)節(jié),慢慢再來說嘍趣钱。

PS:感覺我寫東西口氣挺輕松吼涌献,其實我是個嚴(yán)肅的人-_-。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末首有,一起剝皮案震驚了整個濱河市洁奈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绞灼,老刑警劉巖利术,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異低矮,居然都是意外死亡印叁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門军掂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轮蜕,“玉大人,你說我怎么就攤上這事蝗锥≡韭澹” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵终议,是天一觀的道長汇竭。 經(jīng)常有香客問我,道長穴张,這世上最難降的妖魔是什么细燎? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮皂甘,結(jié)果婚禮上玻驻,老公的妹妹穿的比我還像新娘。我一直安慰自己偿枕,他們只是感情好璧瞬,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渐夸,像睡著了一般嗤锉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捺萌,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天档冬,我揣著相機(jī)與錄音膘茎,去河邊找鬼。 笑死酷誓,一個胖子當(dāng)著我的面吹牛披坏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盐数,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼棒拂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了玫氢?” 一聲冷哼從身側(cè)響起帚屉,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎漾峡,沒想到半個月后攻旦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡生逸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年牢屋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片槽袄。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡烙无,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出遍尺,到底是詐尸還是另有隱情截酷,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布乾戏,位于F島的核電站迂苛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏歧蕉。R本人自食惡果不足惜灾部,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一康铭、第九天 我趴在偏房一處隱蔽的房頂上張望惯退。 院中可真熱鬧,春花似錦从藤、人聲如沸催跪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽懊蒸。三九已至,卻和暖如春悯搔,著一層夾襖步出監(jiān)牢的瞬間骑丸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留通危,地道東北人铸豁。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像菊碟,于是被迫代替她去往敵國和親节芥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法逆害,類相關(guān)的語法头镊,內(nèi)部類的語法,繼承相關(guān)的語法魄幕,異常的語法相艇,線程的語...
    子非魚_t_閱讀 31,582評論 18 399
  • 40℃的天氣 云就那樣在天空中隨意自在的飄著 水光瀲滟 每走到一處似乎都有驚喜 夜晚乘著風(fēng) 坐著船兒 漁夫...
    狒0703閱讀 161評論 0 0
  • 一大早就從鞍山開車回沈陽 白天上班感覺好幸福 能安靜的坐下來 學(xué)習(xí)思考工作! 白天還聽了兩節(jié)和君的智慧養(yǎng)老產(chǎn)業(yè)課程...
    面包和牛奶都會有的閱讀 165評論 0 0
  • 這個叫做“簡書”聽老公說挺不錯纯陨,于是我好不容易的注冊了厂捞,心想既然注冊了,那就寫點啥吧队丝,寫點什么呢.........
    飛天球球閱讀 247評論 0 3
  • 花非花机久,霧非霧臭墨。夜半來,天明去膘盖。來如春夢不多時胧弛,去似朝云無覓處∠琅希——白居易 花草三味 白女巫研制手作面脂香膏這件事...
    白法師閱讀 662評論 0 6