【赠书福利】不扶好眼镜,请别打开这本挑战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.mzph.cn/news/275761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我在工作中是如何使用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 …

java参数化查询_小博老师解析Java核心技术 ——JDBC参数化查询(二)

[步骤阅读四]SQL注入按照以上方式开发&#xff0c;确实已经完成了基本的用户登录业务需求&#xff0c;但是这么做的话可以会出现一个比较严重的问题&#xff0c;那就是容易被SQL注入。所谓SQL注入&#xff0c;就是在需要用户填写信息&#xff0c;并且这些信息会生成数据库查询字…

前端抢饭碗系列之Vue项目如何做单元测试

大家好&#xff0c;我是若川。今天分享一篇vue项目如何做单元测试的好文&#xff0c;文章比较长&#xff0c;建议先收藏&#xff0c;需要时用电脑看。点击下方卡片关注我、加个星标学习源码系列、年度总结、JS基础系列关于单元测试&#xff0c;最常见的问题应该就是“前端单元测…

java activiti jbpm_activiti和jbpm工作流引擎哪个比较好?

原标题&#xff1a;activiti和jbpm工作流引擎哪个比较好&#xff1f;在常用的ERP系统、OA系统的开发中&#xff0c;工作流引擎是一个必不可少的工具。之前在选择工作流引擎时曾经在activiti和jbpm之间有过比较&#xff0c;当时做出的决定是使用jbpm&#xff0c;但实际开发过程中…

识别人声_演唱人声的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;…

游戏 新手引导 设计_我认为每个新手设计师都应该知道什么

游戏 新手引导 设计重点 (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模型格式说明…

交互规则_您必须永不中断的10条交互设计规则

交互规则重点 (Top highlight)In life, there are certain rules you must never break. If you do there will be hell to pay. In User Interface design there are also rules to live by. They are called “heuristics” or general principles that improve usability in…

一个帮助我100%拿offer的面试学习法

大家好&#xff0c;我是若川。今天周日&#xff0c;再分享一篇相对轻松的文章。文中说的面试学习法有一定的借鉴意义。另外我也推荐大家每隔一段时间不为跳槽的更新自己简历&#xff0c;也是对自己一阶段的梳理总结&#xff0c;毕竟功在平时。哈喽大家好&#xff0c;我是大圣&a…

java获取apk启动activity_兼容 Android 10 启动 APK 实现方案

背景我们想启动 APK 程序&#xff0c;有很多种方法&#xff0c;可以使用 Intent&#xff0c;也可以使用 adb shell 命令来启动&#xff0c;还有通过反射来启动 APk 程序。我们这里主要讨论通过反射的方式来启动 apk 程序。Android10 之前&#xff0c;我们通过反射来启动 APK&am…

Android Studio中解决jar包重复依赖导致的代码编译错误

在原本的代码中已经使用了OKHTTP和rxjava&#xff0c;然后今天依赖retrofit的时候一直报错 Program type already present: okhttp3.internal.ws.RealWebSocket$1.class 说是我重复添加了OKHTTP的包&#xff0c;但其实我直接把OKHTTP的依赖注释掉都没用&#xff0c;只要依赖ret…

面试被问项目经验不用慌,按这个步骤回答绝对惊艳

大家好&#xff0c;我是若川。常有小伙伴问&#xff0c;面试时项目经验怎么回答&#xff0c;经常会分享这篇文章给TA。本文经授权转载。面试、学习源码系列、年度总结、JS基础系列前言本篇文章的作者是来自阿里淘系用户增长前端团队的“亦逊”&#xff0c;18年作为双非本科生通…

使用概念模型 和心智模型的_为什么要使用模型?

使用概念模型 和心智模型的In a former life, I studied critical feminist theory. This included the field of Semiotics — the study of signs and the production of meaning, as well as Deconstruction —the unpacking of meaning to question assumptions.在过去的生…

什么?在 VSCode 里也能用 Postman了?

大家好&#xff0c;我是若川。VSCode中有很多好用的插件&#xff0c;今天推荐 Postcode。面试、学习源码系列、年度总结、JS基础系列以前一直在用postman做API测试&#xff0c;如果你同时在使用vscode开发时&#xff0c;每次切出去可能比较烦&#xff0c;其实就是太懒了。。。作…

英语 动画 教学 字母_字母形式在阅读教学中的作用

英语 动画 教学 字母Note: this essay may also be found on Design Observer.注意&#xff1a;这篇文章也可以在 Design Observer 上找到 。 My first-grade reading tutor gave the best stickers. Puffy, smelly, sparkly — she even had a few that were fuzzy. At that …

java中自定义表单和流程_让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑....

1.1.1.1: SDK表单概要说明&#xff1a;我们把流程引擎与表单引擎统称为ccbpm&#xff0c;但是有一些用户并不想使用表单引擎&#xff0c;而是用自己的表单&#xff0c;仅仅使用流程引擎&#xff0c;这样的方式就要采用ccbpm的sdk表单开发模式。关于ccbpm的SDK:ccbpm的sdk就是cc…