JavaScript 可算是世界上最流行的程式設計語言,它曾被 Web 開發設計師貼上噩夢的标簽,雖然真正的噩夢其實是 DOM API,這個被大量的開發與設計師随手拈來增強他們的 Web 前端的腳本語言,如今越來越被重視,雖則如此,JavaScript 仍然擁有很多讓人費解的東西。
它最初叫 Mocha, 接着改名為 LiveScript,最後才确定命名為 JavaScript,根據曆史記錄,Java 的命名與 Netscape 和 Sun 之間的合作有關,作為交換條件,Netscape 在他們備受歡迎的浏覽器中建立了 Java 運作時。值得一提的是,這個名字的出台幾近一個玩笑,要知道,LiveScript 和 Java 在用戶端腳本方面存在敵對關系。
不管怎麼說,人們後來不得不一再澄清的一件事就是,JavaScript 和 Java 毫無關系。
看看這段代碼,它傳回的是 object。

這實在令人費解,假如 null 表示空值,它怎麼可以是對象?簡單說,它是 JavaScript 最初版本的錯誤,這個錯誤甚至被微軟的 JScript 直接借用。
NaN,表示一個非數字的值,然而問題是,NaN不等于任何東西,甚至不等于它自己。
這顯然不對,事實上,如果要判斷一個值确實是 NaN,你需要用 isNaN() 函數。
必須承認,事實上,這不是 JavaScript 的錯,是各個浏覽器有意為之。比如,以下是用 JavaScript 探測 Safari 時得到的結果:
是否注意到其中的第一個單詞 Mozilla/5.0,為什麼 Safari 會被探測為 Mozilla,盡管 Safari 後來已經糾正這一問題,但仍然不能解釋為什麼它們要這樣誤導開發者。事實上,你會發現,絕大多數浏覽器把他們的 User Agent 設定為 Mozilla,答案要回到10年前,這更多是一種政策。
User Agent 是一段用來辨別目前浏覽器身份的字元串,世界上第一個浏覽器 Mosaic, 曾這樣标志自己:
這很合理,是以當 Netscape 出來的時候,它保留了 Mosaic 這個傳統,還在後面添加了一個加密方式部分。
到目前為止,一切安好,直到 IE3 釋出,當 IE3 釋出的時候,Netscape 正如日中天,那時,很多伺服器和程式已經部署了用戶端探測機制,以便認出 Netscape,雖然現在看來,這很值得争議,但當時并沒什麼。當 IE 初次推出它們的 User Agent 标志的時候,是這個樣子:
這讓 IE 很被動,因為 Netscape 已經能被很多伺服器識别,是以,開發者們幹脆希望 IE 被誤認為 Mozilla,然後,再單獨加一個 IE 的标簽。
如今,幾乎所有浏覽器都步 IE 後塵,将自己辨別為 Mozilla,這大概是一種連鎖反應。
參看以下代碼:
foo(bar.method) 傳回結果不同原因是,method 函數是被當作 windows 對象,而不是 bar 下的對象調用的。要解決這個問題,我們必須從傳遞的匿名函數中調用 bar.method() 。
JavaScript 和 Java 有不少共同之處,如位操作。
& - and
| - or
^ - xor
~ - not
>> - signed right shift
??? - unsigned right shift
<< - left shift
看看第一個 & 操作符,使用 && 應該更有效,因為 JavaScript 和 Java 不一樣,JavaScript 沒有整數,需要來回轉換,是以,轉換操作花的時間更長。
諸如 null, false, undefined 一類的值幾乎表示同樣的意思,它們之間的不同又讓人很迷惑。
雖然 JavaScript 包含很多算術操作,但你不妨運作一下下面的算式,".2+.4" 應該等于 ".6" 是不是,然而傳回的确是 "0.6000000000000001"。JavaScript 在小數計算通路存在一些小問題。
為什麼會這樣?簡單說,因為 JavaScript 使用 IEEE 标準進行二進制浮點運算,不過,對整數計算是沒問題的。
看看以下兩段代碼:
它們應該是一樣的,隻是 { 位置不同而已,是吧。然而我們再看下面的代碼:
如果我們把其中的
換成
就會引發錯誤,這是因為 JavaScript 有一個功能,會糾正它認為錯誤的代碼書寫,它會自作聰明地在 return 這個詞後面插入一個 ";" ,錯誤是以而生。
<a target="_blank" href="http://www.cnblogs.com/lhb25/p/must-read-links-for-web-designers-and-developers-volume-12.html">Web 前端工程師和設計師必讀精華文章推薦</a>
<a href="http://www.cnblogs.com/lhb25//lhb25/archive/2011/07/28/html5-awesome-single-page-sites-inspiration.html" target="_blank">酷!15個精美的 HTML5 單頁網站作品欣賞</a>
<a target="_blank" href="http://www.cnblogs.com/lhb25//lhb25/archive/2011/11/22/best-awesome-css3-animation-demos.html">炫!35個讓人驚訝的 CSS3 動畫效果示範</a>
<a href="http://www.cnblogs.com/lhb25//lhb25/archive/2012/03/02/30-mind-blowing-parallax-scrolling-effect-websites.html" target="_blank">贊!30個與衆不同的優秀視差滾動效果網站</a>
<a target="_blank" href="http://www.cnblogs.com/lhb25//lhb25/archive/2012/01/13/25-outstanding-single-page-website-designs.html">靓å!25個優秀的國外單頁網站設計作品欣賞</a>
<a target="_blank" href="http://www.cnblogs.com/lhb25//lhb25/archive/2011/08/09/awesome-html5-and-javascript-effects.html">帥!8個驚豔的 HTML5 和 JavaScript 特效</a>
<a href="http://www.cnblogs.com/lhb25//lhb25/archive/2011/06/27/35-exclusive-rainbow-colored-flash-websites.html" target="_blank">頂!35個很漂亮的國外 Flash 網站作品欣賞</a>
<a href="http://www.cnblogs.com/lhb25//lhb25/archive/2011/08/24/outstanding-admin-panels-part-one.html" target="_blank">哇!34個漂亮網站和應用程式背景管理界面</a>
<a href="http://www.yyyweb.com/go/web" target="_blank">本部落格新站點 ◆ 前端裡 ◆ 歡迎圍觀:)</a>
歡迎任何形式的轉載,但請務必注明出處。