【贈書福利】不扶好眼鏡,請別打開這本挑戰JS語言特性的書

文末贈福利

大家好,我是若川。為感謝大家一直以來的支持和肯定,文末抽《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. 1、已關注本公眾號【若川視野】

    2、已添加本人微信好友【ruochuan12】

    3、至少是前端開發同學

????不滿足以上條件的不予發放獎品。如有未發放獎品,則在本人【朋友圈】or【前端交流群】送出書籍。

聽說點擊【在看】可以增加中獎運氣哦!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275761.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275761.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275761.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL存儲過程之事務管理

MySQL存儲過程之事務管理 ACID:Atomic、Consistent、Isolated、Durable 存儲程序提供了一個絕佳的機制來定義、封裝和管理事務。 1&#xff0c;MySQL的事務支持 MySQL的事務支持不是綁定在MySQL服務器本身&#xff0c;而是與存儲引擎相關&#xff1a; Java代碼 MyISAM&#xff…

羅馬數字 java_【leetcode刷題】[簡單]13.羅馬數字轉整數(roman to integer)-java

羅馬數字轉整數 roman to integer題目羅馬數字包含以下七種字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。字符 數值I 1V 5X 10L 50C 100D 500M 1000例如&#xff0c; 羅馬數字 2 寫做 II &#xff0c;即為兩個并列的 1。12 寫做 XII &a…

我在工作中是如何使用Git的

大家好&#xff0c;我是若川。今天分享一篇關于git的好文章。我自己經常用命令行終端和git縮寫。具體可以看我以往的文章。使用 ohmyzsh 打造 windows、ubuntu、mac 系統高效終端命令行工具&#xff0c;用過都說好。點擊下方卡片關注我、加個星標學習源碼整體架構系列、年度總結…

克服浮躁_設計思維:您克服并贏得低迷的最終工具。

克服浮躁設計思維101 (Design thinking 101) Let’s begin by getting ourselves clear on the question: What is design thinking?讓我們首先弄清楚問題&#xff1a;設計思想是什么&#xff1f; Many people have an impression that design thinking has something to do …

mongodb數組字段prefix匹配返回

DOC: https://docs.mongodb.com/manu... collection&#xff08;test&#xff09;結構 {_id: Objectd("123456789"),category: [apple_1,apple_2,banana_1,banana_2] }Question: 對test表的所有數據做category過濾&#xff0c;返回category中以apple開頭的元素 表原數…

java參數化查詢_小博老師解析Java核心技術 ——JDBC參數化查詢(二)

[步驟閱讀四]SQL注入按照以上方式開發&#xff0c;確實已經完成了基本的用戶登錄業務需求&#xff0c;但是這么做的話可以會出現一個比較嚴重的問題&#xff0c;那就是容易被SQL注入。所謂SQL注入&#xff0c;就是在需要用戶填寫信息&#xff0c;并且這些信息會生成數據庫查詢字…

Lightbox 效果

網上其實到處都是。 遮罩層&#xff1a; .transparent {filter:alpha(opacity0); -moz-opacity: 0.0; opacity: 0.0; z-index: 90;background-color:#000;float:left;top:0;left:0;position:absolute;width:100%; }主要業務層&#xff1a;.rollover5 {display:none; position:a…

前端搶飯碗系列之Vue項目如何做單元測試

大家好&#xff0c;我是若川。今天分享一篇vue項目如何做單元測試的好文&#xff0c;文章比較長&#xff0c;建議先收藏&#xff0c;需要時用電腦看。點擊下方卡片關注我、加個星標學習源碼系列、年度總結、JS基礎系列關于單元測試&#xff0c;最常見的問題應該就是“前端單元測…

React Native組件開發指南

React Native的組件開發一直處在一個比較尷尬的處境。在官方未給予相關示例與腳手架的情況下&#xff0c;社區中依然誕生了許許多多的React Native組件。因為缺少示例與規范&#xff0c;很多組件庫僅含有一個index.js文件。這種基礎的目錄結構也導致了一些顯而易見的問題&#…

java activiti jbpm_activiti和jbpm工作流引擎哪個比較好?

原標題&#xff1a;activiti和jbpm工作流引擎哪個比較好&#xff1f;在常用的ERP系統、OA系統的開發中&#xff0c;工作流引擎是一個必不可少的工具。之前在選擇工作流引擎時曾經在activiti和jbpm之間有過比較&#xff0c;當時做出的決定是使用jbpm&#xff0c;但實際開發過程中…

C/C++中善用大括號

C/C中善用大括號轉載于:https://www.cnblogs.com/satng/archive/2010/12/17/2138840.html

識別人聲_演唱人聲的5個技巧

識別人聲什么是聲樂伴奏&#xff1f; (What is Vocal Comping?) Vocal comping describes the process of combining multiple vocal takes into one “supertake” that has the best parts of each. This is called a “composite track,” or comp for short. Many instrum…

你知道source map如何幫你定位源碼么?

大家好&#xff0c;我是若川。今天分享一篇我們經常會忽略的定位原始代碼位置原理的文章。文章不長&#xff0c;例子不錯&#xff0c;可以先收藏&#xff0c;有空時動手試試。學習源碼系列、年度總結、JS基礎系列前言我們知道&#xff0c;代碼上線前要經過壓縮&#xff0c;美化…

OOP 中的 方法調用、接口、鴨式辯型、訪問者模式

2019獨角獸企業重金招聘Python工程師標準>>> 方法調用的四種方式 直接調用&#xff1a;通過類或者實例直接調用其方法。接口調用或者轉型調用&#xff1a;通過將實例回調給一個接口對象&#xff0c;或者轉型為一個父類的實例&#xff0c;來調用間接調用&#xff1a;…

Substitution控件MethodName無法取到Session的解決辦法

Substitution是對緩存頁面實現動態顯示部分內容的控件&#xff0c;使用方法&#xff1a;在后臺頁面添加靜態方法&#xff0c;private static string MethodName(HttpContext context),經典的用法是動態顯示的是當前的登錄用戶名字&#xff08;非登錄用戶顯示其他的&#xff09;…

java中想要保留2位小數_java使double保留兩位小數的多方法 java保留兩位小數

mport java.text.DecimalFormat;DecimalFormat df new DecimalFormat("######0.00");double d1 3.23456double d2 0.0;double d3 2.0;df.format(d1);df.format(d2);df.format(d3);3個結果分別為:3.230.002.00java保留兩位小數問題&#xff1a;方式一&#x…

游戲 新手引導 設計_我認為每個新手設計師都應該知道什么

游戲 新手引導 設計重點 (Top highlight)I should probably have titled this article “What I wish I knew as a newbie designer.” Anyway, I’ve been doing this graphic design thing for a little over a year now, and I know now, a few things that could have made…

畢業年限不長的前端焦慮和突破方法

大家好&#xff0c;我是若川。今天周六&#xff0c;分享一篇相對輕松的文章。經作者耳東蝸牛 授權轉載鏈接&#xff1a;https://juejin.cn/post/6968002742321152014也可點擊文末閱讀原文直達本篇文章來源于&#xff1a;周五和團隊成員[20年畢業]的一次閑聊。畢業不到一年&…

開源自然語言處理工具包hanlp中CRF分詞實現詳解

CRF簡介 CRF是序列標注場景中常用的模型&#xff0c;比HMM能利用更多的特征&#xff0c;比MEMM更能抵抗標記偏置的問題。 [gerative-discriminative.png] CRF訓練 這類耗時的任務&#xff0c;還是交給了用C實現的CRF。關于CRF輸出的CRF模型&#xff0c;請參考《CRF模型格式說明…

java 素數歐拉篩選_[C++]歐拉素數篩的理解與實現

在傳統的素數篩法中&#xff0c;我們使用了對于每一個數n&#xff0c;在 1~(√n) 范圍內進行取模檢查&#xff0c;這樣逐一判斷的復雜度為n(√n)。但如果我們需要更快的篩法時怎么辦&#xff1f;于是著名的歐拉篩誕生了。它能將復雜度降為**O(n)**級別。1.關鍵理解&#xff1a;…