文末赠福利

大家好,我是若川。为感谢大家一直以来的支持和肯定,文末抽《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【前端交流群】送出书籍。

听说点击【在看】可以增加中奖运气哦!

【赠书福利】不扶好眼镜,请别打开这本挑战JS语言特性的书相关推荐

  1. 不扶好眼镜,请别打开这本挑战JS语言特性的书

    " 人们不停地给老化的语言"整容",拼命地往其中注入各种新的特性来稳住其流行地位,或者至少让其看起来不那么"土".与"代码膨胀"一 ...

  2. 赠书福利丨我们人类与人工智能技术究竟是怎样的关系?

    热点追踪 / 深度探讨 / 实地探访 / 商务合作 图片来自pixabay.com 撰文 | 爱德华·阿什福德·李(加州大学伯克利分校教授) 责编 | 李珊珊 摘要: 数字技术正在和人类文明协同进化. ...

  3. 赠书福利丨被马斯克送上天的《银河帝国》和互联网江湖

    热点追踪 / 深度探讨 / 实地探访 / 商务合作 当年的<三体>热,炒火了"降维打击"这个词.但在科幻领域,刘慈欣坦言自己只能算是个后起之秀,对业界真正的大神阿瑟·克 ...

  4. 赠书福利|一本书是写给美国人看的书,告诉我们,美国科技为什么领先?

    热点追踪 /  深度探讨 / 实地探访 / 商务合作 近期,中美科技竞愈演愈烈,有一种误导认为,美国已经衰落或处在衰落的过程中.清醒的专家提醒我们:尽管从长期看,美国转型不易,有很大麻烦,但短期并没有 ...

  5. 赠书福利|说出来你可能不信,这本书或许可以「预测」未来

    热点追踪 / 深度探讨 / 实地探访 / 商务合作 当世界充满变数时,人们对未来最为好奇:全球经济陷入衰退:员工被解雇,失业率飙升:经济学家散播阴郁气氛,面色严峻地分析形势:报纸头条全是消极论调:人们 ...

  6. 赠书福利|手握超4万亿美元,嘉信理财创始人的33条成功心法

    热点追踪 /  深度探讨 / 实地探访 / 商务合作 内容来源 |  本文摘编自中信出版社出版书籍 <投资:嘉信理财持续创新之道>,查尔斯·施瓦布 著 嘉信理财是一家总部设在旧金山的金融服 ...

  7. 科学视角读科幻:李开复新书《AI未来进行式》|赠书福利

    文末有面向量子位读者的<AI未来进行式>签章本赠书活动,不要错过呀! 目前,AI 已经蓄能完毕,即将迎来一个全新的爆发拐点. 仅仅在过去 5 年里,AI 就已经击败了围棋.扑克.电竞游戏 ...

  8. 赠书福利|SpaceX的成功,意味着新太空竞赛的开始?

    热点追踪 / 深度探讨 / 实地探访 / 商务合作 北京时间 5 月 31 日凌晨 3 点 23 分,SpaceX DM-2 龙飞船(Crew Dragon)在美国肯尼迪航天中心 39A 发射场正式发 ...

  9. Python量化交易之预测茅台股票涨跌(文末赠书福利)

    本文摘自清华大学出版<深入浅出Python量化交易实战>一书的读书笔记,这里把作者用KNN模式做的交易策略,换成了逻辑回归模型,试试看策略的业绩会有怎样的变化. 二话不说,上梯子,导库拉数 ...

最新文章

  1. 迪拜的经济支柱是什么?
  2. 451. 根据字符出现频率排序golang
  3. mysql mtop_mysqlmtop2.2运行出错
  4. javascript相等运算符与等同运算符(转自www.jqueryba.com)
  5. 工作3年和工作7年的程序员到底差在哪里?
  6. 用户输入和命令行参数
  7. 均值(average)与期望(mean)
  8. ip地址与交换机工作原理
  9. VRRP:虚拟网关冗余技术
  10. Camera幻灯片参数设置
  11. ip地址为61.179.150.39/28,问其子网号为多少,广播号为多少,可用ip地址范围是多少
  12. Mac上使用IE浏览器
  13. 电视剧《奋斗》精彩对白节选---(三)
  14. 腾讯优图贾佳亚:人工智能的多模态发展
  15. 阿里面试官常问问题,TCP和UDP的区别,你真的弄懂了吗?
  16. 抢占下一代互联网战略制高点
  17. 如何查看计算机用户的密码,电脑密码如何查看? 教您查看方法
  18. Android Telephony控制通话消息下发流程
  19. 用友erp同步输出文件服务器拒绝,用友系统备份帐套,文件拒绝访问怎么办?
  20. Versa Networks在贝莱德领导的首次公开募股前融资中获得1.2亿美元融资,以利用快速增长的SASE市场

热门文章

  1. ios跨线程通知_iOS多线程开发(三)---Run Loop(一)
  2. linux要求关闭httpd服务,Apache2.4.4的安装及实现service和chkconfig系统控制httpd开启关闭...
  3. 《深入理解Java虚拟机》读书笔记
  4. Visual Studio的调试技巧
  5. Web UI 自动化测试环境搭建 (转载自51测试天地第三十九期上)
  6. 图片的缩放(放大缩小)
  7. [转]gcc生成动态库静态库
  8. 理解面向连接和无连接协议之间的区别
  9. arcgis js 4.x 地图中加入图片
  10. html中dd dt的效果,html中dt dd