文末贈福利
大家好,我是若川。為感謝大家一直以來的支持和肯定,文末抽《JavaScript悟道》3本包郵送和若干紅包,詳細規則請看文末哦。
"
人們不停地給老化的語言“整容”,拼命地往其中注入各種新的特性來穩住其流行地位,或者至少讓其看起來不那么“土”。與“代碼膨脹”一樣,“特性膨脹”過猶不及。我們更應該去發現JavaScript的內在美,而不是做各種表面功夫。
——《JavaScript悟道》道格拉斯·克羅克福德
"
在 JavaScript 語言的宗師級人物榜單里,有一個非常有趣的人,他曾任 PayPal、Yahoo 等知名互聯網企業 JavaScript 資深架構師,還創造了備受贊譽的 JSON 數據交互格式,也是 JavaScript ?的布道者,為 JS 的應用和發展做出了巨大貢獻。
但,他的每一次正式發聲,就會飽受業界挑戰和攻擊,因為這個老爺子實在是太有性格了。
道格拉斯·克羅克福德(Douglas Crockford)圖片來源 Wikipedia
按理說,他開發了各種與 JavaScript 相關的工具,比如 JSLint 和? JSMin,道格拉斯可以說是領域里的權威專家。但是他并不愿意接受 JSON 和 JavaScript 取得的成就。
道格拉斯在codemotion上接受采訪
這么一看,似乎大師是比較自謙,畢竟 Brendan Eich 才是 JavaScript 之父。但實際上,老爺子在2008年出了一本非常暢銷的書?JavaScript: the Good Parts(中文版《JavaScript語言精粹》)。從書名就不難看出,大師的畫風相當耿直……
在他看來,JavaScript 外表糟粕,但好在,它的內在還是很美好的,所以他只寫那些“精粹的部分”。
?
在這本書中,道格拉斯提到:
JavaScript就像一塊大理石,我要剝落那些不好的特性直到這門語言的真實本質自我顯露出來。我相信我精雕細琢出來的優雅子集大大地優于這門語言的整體,它更可靠、更易讀、更易于維護。
此書一出,業界反應激烈,傳聞老爺子甚至還遭受到了暴力威脅。
如果你以為故事到這就結束了,那可太小瞧這位「有性格的」專家了。
熟悉 JavaScript 整個發展進程的人都知道,“每10年 JavaScript 都會發生一次改朝換代式的變革。”
因此,當老爺子10年后想要重新修訂他的代表作?JavaScript: the Good Parts?時,赫然發現這本書的版權已經全部授權給了當時的 Yahoo,他沒有權利再進行任何修訂。
于是他決定重新寫一本關于 JavaScript 的書,而寫這本書的理由只有一個:
相比過去10年,JavaScript 的精粹變少了,但留下來的那些精粹更顯閃耀???
作者 | 道格拉斯·克羅克福德
來源 | 《JavaScript悟道》
? ? ?
0.1
異類
我有預感,本書會讓一些同僚感到不舒服。我是異類,正在挑戰一些守舊者的權威。我已經習慣這些了。多年前,我因為發現了 JavaScript 居然有精粹并將其整理成冊而飽受挑戰和攻擊。還有當我剛提出 JSON(它現在已經成了時下最流行的數據交換格式)的時候,也是如此。
社區是有信仰的,哪怕這些信仰存在錯誤,社區成員也能從中獲益。因此,當信仰被人質疑時,社區成員就會覺得受到了威脅。對,我就是這個質疑的人。我對真理的渴求高于對社區利益的看重。恰恰就是這一點會讓很多人不高興。
我其實只是一個普通程序員,只想找到一個最佳實踐來寫出優美的代碼。雖然我的一些想法可能不對,但我也在思考如何糾正這些想法。我們這代程序員有很多思維模式已在 FORTRAN 時代固化,我覺得是時候踏出改變的一步了。不過,即使我處在一個極具創造性的行業中,變革仍然并非易事。
如果你認為自己被我這個異類的話冒犯了,那么我建議你將本書放回書架并遠遠走開。
0.2
代碼
? ? ?
本書的所有隨書代碼都可以免費獲取。你可以將其用于任何目的,但請不要拿它們“作惡”。如果有可能,我希望這些代碼能讓你做一些“好事”。
強烈建議你不要簡單地復制粘貼你并不理解的那些代碼。雖然我們經常戲稱自己是“復制粘貼工程師”,但這種做法實際上是很不可取的。這雖然比不上看都不看一眼就去安裝一款未知軟件那么蠢,但也實在算不上一種明智之舉。在當前的安全技術水平下,最好的安全過濾器就是你的大腦,請務必善用。
雖然我的代碼并不完美,但我認為跟我前幾年寫的代碼相比,它們至少還是有進步的。我個人著重在為這方面的進步而努力,并且希望能活到讓我的代碼達到完美的那一天。我希望你也能在這方面下功夫。你可以在本書的網站(How JavaScript Works)上查看勘誤表 (erratums)1。在拉丁語中,erratum 的復數形式是 errata,但誰讓我用的是現代英語呢?在現代英語中,我們應該通過添加 s 或者 es 來構成復數形式,所以這里我用了 erratums。如果要在保持傳統和與時俱進之間選擇,我選擇與歷史的車輪一起前進,以此來使世界更美好。
?
0.3
未來
雖然本書的主題是 JavaScript,但有時候我實際上是在講另一種可以取代 JavaScript 的語言。我堅信在 JavaScript 之后應該有一門語言脫穎而出。如果 JavaScript 是值得學習的最后一門語言,就真的太可悲了。我們應該為子孫后代找到這樣的下一門語言。這將是我們留給他們的珍貴寶藏。
我認為未來屬于孩子們,也屬于機器人。
當下和未來的互聯網需要下一代的編程范式,它應當是全局分布式的、安全的和事件化編程的。遺憾的是,當下包括 JavaScript 在內的幾乎所有編程語言依舊停留在舊的范式中,即本地化的、不安全的和順序化編程的。我把 JavaScript 看作一門過渡的語言。在 JavaScript 中使用最佳實踐可以很好地為我們未來理解新的編程范式做好準備。
0.4
語法
? ?
我認為 1 的英文拼寫是錯誤的,因此在書中用了自認為更正確的拼寫——wun。one 這個單詞根本不符合任何發音規則,包括各種特殊規則。此外,用一個看著像 0 的字母作為表示 1 的單詞的首字母,本身就不合適。
不過,wun 這個單詞對于大眾來說,看起來有點奇怪。之所以在書中采用這樣的拼寫,是因為我想通過此事讓你明白一個道理:對陌生事物產生的奇怪感覺并不能證明它是錯的。
單詞拼寫已然發生變革。例如,有些小家伙認為把 through 拼寫成 thru 會更好,因為他們覺得這個常用單詞有一半字母不發音毫無道理,用起來效率低下,也給學生造成了困惑。拼寫改革實際上是一次傳統與理性的對抗,有時候理性更容易獲勝。編程語言亦如此。如果你也覺得 wun 比 one 更有意義,那么請和我一起努力吧。
一般人在提到像 1 到 10 這類范圍的時候,通常將其理解為到 10 為止,而程序員則通常認為 10 是被排除在外的。這是由一些編程習慣造成的,比如在編程中起始編號一般是 0 而不是 1。因 此,我用“到” (to) 來表示程序員日常認為的“到”,而用“過” (thru) 來表示普通人認為的“到”。也就是說,“0 到 3”代表 0、1、2,而“0 過 3”則代表 0、1、2、3。簡而言之,“到”的語義為小于(<),而“過”則代表小于等于(≤)。? ? ????
?
0.5
示例
我喜歡用正則表達式。然而,正則表達式其實是比較晦澀難懂的。我會在正則表達式中加入一些空白,使其看起來更規整易懂。實際上,JavaScript 并不支持這樣規整的寫法。因此,你看到的如下代碼:? ??
const number_pattern = /^( -? \d+ )(?: \. ( \d* ) )?(?:[ e E ]( [ + \- ]? \d+ ))?$
/;
在實際中則應該是這樣的:
const number_pattern = /^(-?\d+)(?:\.(\d*))?(?:[eE]([+\-]?\d+))?$/;
我實在忍不住在上面晦澀的正則表達式中加入了各種縮進和空格,好讓讀者讀起來一目了然。
在很多章節中,我會使用JavaScript表達式作為示例。通常,我會以一個不以分號(;)結尾的表達式來進行展示,后跟一句注釋(以//開頭)來表示其結果。
// 示例3 + 4 === 7
// true
NaN === NaN
// false
typeof NaN
// "number"
typeof null
// "object"
0.1 + 0.2 === 0.3
// false
3472073 ** 7 + 4627011 ** 7 === 4710868 ** 7
// true
上述種種,終焉之前,皆有所釋。
*本文選自《JavaScript悟道》,內容有大量刪減和調整,完整內容請移步至圖靈社區搶先體驗。
用“逆反”的方式
重新認識JavaScript語言
﹀
﹀
﹀
福 利 時 間
?抽獎規則:
????1、【實體書】:本文「??????留言?」Get抽獎路徑參與抽獎,中獎同學獲得《JavaScript悟道》圖書1本,抽3名同學。
????2、【紅包】:本文「留言」Get抽獎路徑參與抽獎,中獎同學得微信紅包「2元」,抽20名同學。
????3、本次【實體書】和【紅包】共抽取23名同學,快快參與留言互動獲取抽獎路徑吧~
開獎時間:
????2021年06月21日 20:00,小程序自動開獎
領獎條件(劃重點啦):
????2021年06月21日 20:00 開獎前,必須同時滿足以下3條開獎條件
1、已關注本公眾號【若川視野】
2、已添加本人微信好友【ruochuan12】
3、至少是前端開發同學
????不滿足以上條件的不予發放獎品。如有未發放獎品,則在本人【朋友圈】or【前端交流群】送出書籍。
聽說點擊【在看】可以增加中獎運氣哦!▼