这是在JavaScript如何不吸

让我们诚实。很多JavaScript代码很烂。改变这种状况!

24分钟阅读 2019年8月2日,

- - -

图片由罗伯特•贝克Unsplash

JavaScript是一个不容小觑的力量。它是世界上最广泛使用的编程语言。它的简单性和丰富的学习资源让初学者。平易近人大型人才池使JavaScript吸引各种规模的公司。一个大的生态系统的工具和库是一个真正的开发人员的生产力的福音。有一种语言规则的前端和后端是一个巨大的好处,同样的技巧可以利用整个堆栈。

JavaScript的权力是核

JavaScript提供了大量的工具和选项,这是好的!然而,苦涩事实是它对开发人员几乎没有限制。给某人没有经验的类似于JavaScript给一盒火柴,一个两岁的孩子连同一罐汽油…

JavaScript是核的力量——它可用于供电的城市也可以被用来摧毁。建筑使用JavaScript的东西是很容易的。构建软件两种可靠的可维护的不是。

代码的可靠性

图片由Jaromir KavanUnsplash

当构建一个大坝,工程师首先关心的可靠性。建一个大坝没有任何计划或安全措施是危险的。这同样适用于建筑桥梁、飞机、汽车…你的名字。没有花哨的功能无论汽车是不安全,不可靠的,而不是马力,排气的响度,甚至使用的类型的皮革内饰。

同样,每一个软件开发人员的目标是写作可靠的软件。没有什么比这个更重要代码是否有问题和不可靠的。什么是最好的方式编写代码,可靠吗?简单。简单是相反的复杂性。因此,我们首先作为软件开发人员应该负责减少代码的复杂性。

让一个有经验的开发人员除了一个没有经验的人是否可以编写可靠的软件之一。是的,是可靠的还包括维护——只能可靠可维护的代码。整个作品侧重于写代码,是可靠的。

尽管我始终在函数式编程中,我不会传。相反,我将带一些有用的函数式编程的概念,并证明它们是可以应用在JavaScript。

我们真的需要软件可靠性?这是由你来决定。有些人会认为,软件只能足够好为客户继续使用它。我倾向于不同意。事实上,我是一个强大的信徒,没有什么比这个更重要,如果软件是不可靠的和不可维护。谁会买一辆性能不可靠的车,这将打破,加快随机?有多少人会使用手机,会失去连接一天几次,并重启随机?可能不是太多。软件不是那么多不同。

没有足够的内存

图片由利亚姆布莱士Unsplash

我们如何开发可靠的软件?我们必须考虑到可用的内存总量。任何开发人员都知道,我们应该节省内存设计我们的程序,没有使用所有可用的内存。如果发生这种情况,那么内存交换会发生——任何不符合RAM存储在硬盘上,和所有运行的程序的性能会退化。

这与编写可靠的软件如何?人类的大脑也有自己的版本的RAM,称为工作记忆。是的,我们的大脑是已知的宇宙中最强大的机器,但它有自己的一套限制——我们只能持有大约5条信息在我们的工作记忆在任何给定的时间。

这直接转化为编程,简单的代码将消耗更少的精神资源,使我们更有效,更可靠的软件和结果。这篇文章还有一些可用的JavaScript工具将帮助您实现!

给初学者的报告

在这篇文章中,我将大量使用ES6特性。确保你熟悉ES6前阅读。作为一个简短的回顾:

工具

图片由NeONBRANDUnsplash

JavaScript的最大优势之一是可用的工具。没有其他的编程语言可以拥有访问这样一个生态系统的工具和库。

我也不会惊讶,说我们应该利用这种工具,ESLint在特定的。ESLint是静态代码分析工具。它是最重要的工具,它允许我们在代码库中发现潜在问题,确保高质量的代码库。最好的部分是产品毛羽是一个完全自动化的过程,可以用来防止劣质代码到代码库。

许多人仅仅利用ESLint——他们只是使预构建配置,等等eslint-config-airbnb,认为他们做的。这是一个合理的方法,但不幸的是,这只触及表面ESLint。JavaScript是一种语言,没有限制。不足产品毛羽设置可以有深远的影响。

是的,熟悉语言的所有的特性可能是有用的。然而,有经验的开发人员也有人谁知道特性使用。JavaScript是一种古老的语言,它有大量的行李和它试图做的一切。重要的是能够告诉坏的好的部分。

ESLint配置

如果你想跟随和利用的一些建议从这篇文章中,你可以设置ESLint如下。我建议熟悉一个接一个的建议,包括ESLint规则到您的项目一个接一个。他们最初配置为警告,一旦你舒适,你可以转换的一些规则错误

在项目的根目录下运行:

然后创建一个.eslintrc.yml文件在您的项目的根目录:

如果你使用IDE VSCode一样,一定要建立一个ESLint插件

您还可以手动运行ESLint从命令行:

npx eslint。

重构的重要性

图片由杰森梁Unsplash

重构的过程中减少现有代码的复杂性。正确应用时,它就变成了最好的武器技术债务的可怕的怪物。没有持续的重构,技术债务将继续累积,进而将使开发者慢而沮丧。技术债务是开发商停止燃烧的主要原因之一。

重构的过程归结为清理现有的代码,同时确保代码仍然功能正确。重构被认为是良好的实践在软件开发中,它应该是一个正常的一部分开发过程在任何健康的组织。

作为一个警告,在进行任何重构之前,最好有代码覆盖着自动化测试。很容易不小心打破现有功能和有一个全面的测试套件是一个伟大的方式来限制任何潜在的问题。

的最大来源的复杂性

图片由Leonel FernandezUnsplash

我知道这听起来可能很奇怪,但是代码本身的最大来源的复杂性。事实上,没有代码最好的方法是编写安全的和可靠的软件。坦率地说,这并不总是可能的,因此第二个最好是减少代码的数量。更少的代码意味着更少的复杂性,那样容易!更少的代码也意味着一个更小的表面积附着的bug。甚至还有一个说初级开发人员编写代码,而高级开发人员删除代码。完全同意。

长的文件

让我们承认,人类是懒惰。懒惰是一种短期的生存策略连接到我们的大脑。它帮助我们保存能量通过避免事情并不对我们的生存至关重要。

我们中的一些人有点懒,不是很严格。人们将越来越多的代码到同一个文件…如果没有限制一个文件的长度,然后这些文件倾向于保持无限增长。根据我的经验,超过200行代码的文件成为人类的大脑太多理解,变得难以维护。长文件也是一个更大的问题的症状——代码可能做太多,这违反了单一职责原则。

该如何解决呢?简单!简单地将大文件分解成更小的更细粒度的模块。

建议ESLint配置:

规则:
max-lines:
——警告
- 200

长函数

另一个主要来源的复杂性是长期的、复杂的功能。这些函数很难推断。他们通常有太多的责任和很难测试。

让我们考虑以下express.js更新博客条目的代码片段:

函数体是38线长和它做的几件事:解析post id,发现现有的博客,验证用户输入,返回验证错误的无效输入,更新文章的集合,并返回更新的博客文章。

很明显,它可以重构为一些小的功能。由此产生的路由处理程序可以看起来像这样:

建议ESLint配置:

规则:
max-lines-per-function:
——警告
- 20

复杂的功能

复杂函数伴随长函数——长函数总是比短的更复杂的函数。是什么让函数复杂?多个东西,但那些容易修复是嵌套的回调,高圈复杂度。

嵌套的回调通常导致回调地狱。它可以很容易地减轻promisifying回调函数,然后利用async-await。

这里有一个例子与深层嵌套的回调函数:

圈复杂度

另一个函数的复杂性的主要来源是圈复杂度。简单地说,它指的是数量的语句(逻辑)在任何给定的函数。认为如果语句、循环和switch语句。这种功能是很难推断和使用应该是有限的。这里有一个例子:

建议ESLint配置:

规则:
复杂性:
——警告
- 5

max-nested-callbacks:
——警告
- 2
max-depth:
——警告
- 3

另一个重要的方法是什么减少代码,以及,复杂性?声明性的代码,但更晚。

可变状态

图片由Alexey TurenkovUnsplash

状态是什么?简单地说,状态是任何临时数据存储在内存中。认为在对象变量或字段。国家本身是无害的。可变状态是最大的一个来源的复杂性在软件。特别是当加上面向对象(后面详细讨论)。

人类大脑的局限性

可变状态这样的一个大问题是为什么呢?正如我之前说过,人类的大脑是已知的宇宙中最强大的机器。然而,我们的大脑是非常糟糕的工作与国家因为我们只能持有大约五项一次在我们的工作记忆。很容易推断的一段代码,如果你只想到什么代码,而不是变量改变代码库。

编程与可变状态是一种精神杂耍️。我不知道你,但是我可以兼顾两个球。给我三个或更多,我肯定会放弃所有。编码是相同的,我变得更富有成效,我的代码变得更加可靠的一旦我把可变状态。

可变状态的问题

让我们看看在实践中可变性如何使我们的代码有问题:

错误是非常微妙的,但通过变异函数参数我们不小心修改原来的物品的价格。它应该保持10,但在现实中,13个价值发生了变化!

我们如何避免这些问题呢?通过构造并返回一个新的对象(而不是不变性):

请记住,通过使用ES6传播复制运营商浅拷贝,而不是深复制——它不会复制任何嵌套的属性。例如,如果上面有类似item.seller.id,卖方新项目仍然是指旧的条目,这是不可取的。其他更健壮的方法处理在JavaScript中包括不变的状态immutable.jsRamda镜头。我在另一篇文章将讨论这些选项。

建议ESLint配置:

规则:
fp / no-mutation:警告
no-param-reassign:警告

不要把你的数组

同样的问题也在固有数组变异使用方法:

我认为你可能预期的数组b保持不变?这个错误就可以轻松避免了我们创建一个新数组,而不是打电话

这样的问题可以很容易地避免通过构造新的数组而不是:

const newArray = […,“微软”);

非确定性

非确定性是一个简单的华丽辞藻描述程序无法产生相同的输出,得到相同的输入。如果这听起来并不好,因为这不是什么好。你可能会认为2 + 2 = = 4,但这并非总是如此不确定的项目。主要二加二等于四,但有时它可能成为等于三,五,甚至1004年。

可变状态本质上是不确定的,它使代码易于非确定性(如上所述)。具有讽刺意味的非确定性在被普遍认为是不良的编程,但最流行的编程范例(OOP和命令式)本质上是不确定的,因为他们依赖可变状态。

不变性

如果可变性并不总是最好的选择,那么选择是什么?不变性,当然!利用不变性是一个很好的实践和现在被许多人鼓励。是的,有些人可能不同意,说可变状态很棒(铁锈粉丝吗?)。我能说一件事肯定——可变性并不使代码更可靠。

我也不会在本文中深入不变性。这是一个很大的话题,我以后可能会把一整篇文章不变性。

建议ESLint配置:

规则:
fp / no-mutating-assign:警告
fp / no-mutating-methods:警告
fp / no-mutation:警告

避免让关键字

图片由罗布森Hatsukami摩根Unsplash

是的,var不应该用于JavaScript来声明变量,我不会说任何人感到意外。然而,你可能会惊讶地得知关键字应该避免。变量声明和可以重新分配,使推理代码更难。许多坏的实践,在本文中我们讨论了到目前为止遇到的限制人类的RAM(工作记忆)和使用关键字也不例外。当编程关键字,我们必须记住所有的副作用和潜在的边界情况。不经意间,我们可能会分配一个不正确的值的变量,并浪费时间调试。

这尤其适用于单元测试。在共享可变状态之间多个测试是一个灾难,鉴于大多数测试并行运行测试。

的选择是什么关键字?的常量关键字,当然!尽管它不能保证不变性,它使代码更容易思考禁止重新分配。老实说,你并不真正需要的东西-在大多数情况下,抽调值变量的代码可以提取到一个单独的函数。让我们来看一个例子:

和相同的示例提取到一个函数:

无法利用re-assignment使用字听起来很困难,但它会使你的代码更少的复杂,更具可读性。我还没有使用关键字在很长一段时间,从来没有错过。

进入编程没有的习惯关键词让你有一个很好的的副作用更为严谨。它将迫使你将代码分解成更小更易于管理的功能。反过来,这将使你的函数更专注,将执行更好的关注点分离,也会使代码更可读和可维护的。

建议ESLint配置:

规则:
fp /不让:警告

面向对象编程

“Java是最痛苦的事情发生在ms - dos以来计算。”

——Alan Kay,发明家面向对象编程的

图片由凡妮莎BucceriUnsplash

面向对象编程是一种流行的编程范式用于代码组织。本节讨论的局限性主流OOP中使用Java, c#, JavaScript,打印稿和其他OOP语言。我不是批评的OOP(如SmallTalk)。

这部分完全是可选的,如果你认为使用OOP开发软件时是必须的,那么请跳过这一节。谢谢。

优秀的程序员和糟糕的程序员

优秀的程序员编写好的代码和糟糕的程序员编写糟糕的代码,不管编程范式。然而,编程范式约束不好的程序员应该做太多的伤害。当然,这不是你因为你已经阅读这篇文章,努力学习。糟糕的程序员从来没有时间去学习,他们只让疯狂的按键盘上的按钮。不管你喜欢与否,你将处理糟糕的程序员,一些人将会非常糟糕。OOP,不幸的是,没有足够的约束,防止不好的程序员做太多的伤害。

为什么OOP首先发明了?它的目的是帮助组织程序的代码库。具有讽刺意味的是,OOP应该降低复杂性,然而,它提供的工具,只是似乎越来越多。

OOP中的

OOP代码是容易中的,它严重依赖于可变状态。函数式编程保证我们将永远得到相同的输出,得到相同的输入。OOP不能保证,这使得推理代码更加困难。

如前所述,在非确定性程序的输出2 + 2计算器。添加(2,2)几乎等于四,但有时它可能成为等于三,五,甚至1004年。的依赖关系计算器对象可能会改变计算的结果在微妙,但深刻的方式。这些问题变得更加明显,当并发。

共享可变状态

“我认为大型面向对象型程序与日益复杂斗争当您构建这个大型可变对象的对象图。你知道,试图理解并保持在你的头脑中会发生什么当你调用一个方法,副作用会。”

- - - - - -丰富的希Clojure的创造者,

可变状态是困难的。不幸的是,OOP进一步加剧了问题通过共享可变状态的参考(而非价值)。这意味着几乎任何可以改变一个给定对象的状态。开发人员要记住每一个对象的状态与当前对象。这迅速打击以来人类大脑的局限性我们只可以容纳大约5物品的信息在我们的工作记忆在任何给定的时间。对这种复杂的可变对象图推理是人类大脑的不可能完成的任务。它使用了珍贵和有限的认知资源,将不可避免地导致大量的缺陷。

是的,分享对可变对象的引用是一个权衡,是为了提高效率,可能几十年前重要。硬件已经非常先进,我们现在应该更担心的是开发人员的效率,而不是代码效率。即便如此,与现代工具,不变性,对性能几乎没有任何影响。

OOP宣扬,全局状态是一切罪恶的根源。然而,具有讽刺意味的是,OOP程序大多是一大团的全局状态(因为一切都是可变的和共享的参考)。

迪米特法则不是非常有用——共享可变状态仍然是共享可变状态,无论你如何访问或变异。它只是清洁工地毯下的问题。领域驱动设计吗?这是一个有用的设计方法,它有助于有点复杂。然而,它仍然无法解决根本问题的非确定性。

信噪比

许多人在过去一直关心的复杂性引入的非确定性OOP程序。他们已经想出多种设计模式,试图解决这些问题。不幸的是,这只进一步扫地毯下的基本问题,介绍了更多不必要的复杂性。

如前所述,代码本身的最大来源的复杂性,更少的代码总是比更多的代码。OOP程序通常携带大量的样板代码,和“创可贴”形式的设计模式,信噪比的影响。这意味着代码变得更加详细,看到这个项目的初衷变得更加困难。这不幸的后果使代码更复杂,这反过来,使代码不可靠。

我不会潜水太深的缺点本文中使用面向对象的编程。尽管可能有成千上万的人发誓,我深信现代面向对象软件复杂性的最大来源之一。是的,有成功的项目建立OOP,然而,这并不意味着这些项目不遭受不必要的复杂性。

OOP特别一个坏主意,因为JavaScript语言缺乏诸如静态类型检查,泛型,和接口。的关键字在JavaScript中相当不可靠。

OOP的复杂性无疑是一个很好的锻炼大脑。然而,如果我们的目标是编写可靠软件,然后我们应该努力减少复杂性,理想情况下意味着避免OOP。如果你有兴趣学习更多,一定要看看我的其他文章面向对象编程——万亿美元的灾难

这个关键字

图片由奥斯汀尼尔Unsplash

的行为关键词一直不一致。挑剔,可能意味着完全不同的东西在不同的上下文中。其行为甚至取决于谁也称为一个给定的函数。使用关键字通常导致微妙的和奇怪的错误,很难调试。

是的,它可以是一个很有趣的面试问题问求职者,但的知识关键字不告诉任何东西。只有该候选人花了几个小时研究最常见的JavaScript的面试问题。

我回答,如果我得到了一件棘手的代码使用关键字?作为一个加拿大人,我想说:“我很抱歉…我不知道”。实际的代码不应该容易出错。它应该是可读的,而不是棘手。是一个明显的语言设计缺陷,不应使用。

建议ESLint配置:

规则:
fp /这个:警告

声明式的代码

图片由肖恩·斯垂顿Unsplash

现在声明代码是一个流行的词,但它真的是什么意思?这是什么好吗?让我们找出答案。

如果你已经编程了一段时间,那么很可能你已经利用命令式编程风格,用于描述一组步骤来实现所需的结果。声明式的风格,另一方面,描述了期望的结果,而不是具体的指令。

一些常用的声明性语言SQL和HTML。甚至JSX反应!

我们不告诉一个数据库如何获取我们的数据通过指定具体的步骤。我们使用SQL来描述什么获取:

SELECT *从用户那里国家= '美国';

这大概可以在必要的JavaScript:

或在声明JavaScript,使用实验管道操作符:

你喜欢什么方式?对我来说,第二个似乎更清洁和更可读。

喜欢表达式在语句

表达式应该优先于语句,如果我们的目标是编写声明代码。表情始终返回一个值,而语句用于执行操作,而不返回任何结果。这也被称为“副作用”在函数式编程中。顺便说一下,讨论了状态突变前也是一个副作用。

一些常用的语句是什么?认为如果,返回,开关,,

让我们看一个简单的例子:

这可以很容易地重写为一个三元表达式(声明):

如果返回语句是唯一在lambda函数,然后JavaScript使我们摆脱λ声明:

函数体是减少6行代码一行代码。声明代码超级大国!

使用语句的其他的一些缺点是什么?他们造成的副作用和突变,这容易中的。这使代码可读的和可靠的。重新排序语句是不安全的,因为他们依赖的顺序使用。语句(包括循环)很难并行化,因为他们变异状态之外的范围。使用语句意味着额外的精神开销由于增加了复杂性。

表情,另一方面,可以安全地重新排序,导致没有副作用,易于并行化。

声明性编程需要努力

声明性编程不是一夜之间可以学到的东西。特别是考虑到大多数的人主要是教命令式编程。声明性编程需要纪律和学习用一种全新的思维方式。你怎么学的声明性编程?良好的第一步是学习程序没有可变状态,无法使用关键字,而不是突变。我可以说肯定一件事,如果你尝试声明性编程,你将会惊讶于优雅的代码。

建议ESLint配置:

规则:
fp /不让:警告
fp /没有一个循环:警告
fp / no-mutating-assign:警告
fp / no-mutating-methods:警告
fp / no-mutation:警告
fp /没有删除:警告

避免将多个参数传递给函数

图片由chuttersnapUnsplash

JavaScript并不是一个静态类型语言,没有办法保证所调用的函数是正确的和预期的参数。ES6带来许多伟大的功能表,包括解构对象,也可以用作函数参数。

你觉得下面的代码片段直觉吗?你能告诉马上的参数是什么?我不能!

下面的例子呢?

我认为后者比前者更具可读性。这尤其适用于函数调用由一个不同的模块。利用一个参数对象还能使参数的顺序无关紧要。

建议ESLint配置:

规则:
max-params:
——警告
- 2

喜欢从函数返回对象

下面的代码片段告诉你多少函数的签名呢?它返回什么?它返回用户对象,用户id、操作的状态吗?很难说不了解周围的环境。

从函数返回一个对象使开发人员的意图非常明确和变得更可读的代码:

控制执行流和异常

图片由christof EngstromUnsplash

你喜欢看到500内部服务器错误当你进入了一个无效的输入的形式?如何使用api,不给任何细节,左和右,扔500错误呢?我相信我们都有遇到这样的问题,和经验可能远非令人愉快的。

尽管我们教,当一些意外发生的时候抛出异常,这不是最好的方法来处理错误。让我们看看这是为什么。

异常中断类型安全

异常类型安全,即使在静态类型的语言。根据其签名,这个函数fetchUser(身份证号码):用户应该返回一个用户。函数签名中没有说会抛出一个异常,如果用户不能被发现。如果预计一个异常,那么一个更合适的函数签名是:fetchUser(…):用户|抛出UserNotFoundError。当然,这种语法无效,无论语言。

推理对程序抛出异常变得困难——一个可能永远不会知道是否函数将抛出一个异常。是的,我们可以每一个函数调用封装在一个try / catch块,但这似乎不切实际,会显著影响代码的可读性。

异常中断函数组合

使它几乎不可能利用函数组合异常。在下面的示例中,服务器将返回一个500内部服务器错误如果其中一个无法找到的博客文章。

如果其中一个帖子被删除,但用户仍在试图访问后由于一些模糊的缺陷吗?这将大大降低了用户体验。

元组作为替代的错误处理方式

函数式编程不太深入,一个简单的方法来处理错误是返回一个元组包含的结果和一个错误,而不是抛出异常。是的,JavaScript没有支持元组,但他们可以很容易地模拟使用二元数组的形式(错误,结果)。顺便说一下,这也是默认的错误处理方法:

异常好,有时

异常代码库中仍有一席之地。作为一个经验法则,你应该问自己一个问题——我想让程序崩溃吗?有可能抛出的任何异常降低整个过程。即使我们认为我们仔细考虑所有潜在优势的情况下,例外是不安全的,会导致程序崩溃在未来某个时候。抛出异常,只有如果你真的想让程序崩溃,例如,由于开发人员错误,或一个失败的数据库连接。

异常被称为异常是有原因的。他们应该只用于当有异常发生,和程序已经崩溃,没有其他选择。抛出和捕获异常并不是一个很好的方法来控制执行流。我们只能求助于抛出异常时发生了一个不可恢复的错误。无效的用户输入,例如,不是其中之一。

让它崩溃——避免捕获异常

这给我们带来了错误处理的最终规则,避免捕获异常。这是正确的,我们可以把错误如果我们计划程序崩溃,但我们永远不应该抓住这样的错误。事实上,这是推荐的函数式语言的方法比如Haskell和药剂。

唯一的例外是消费的第三方api。即便如此,最好使用一个helper函数包装函数返回(错误,结果)元组。为此,您可以使用工具saferr。我将介绍这样的包装下一节将更详细地对部分功能的应用程序。

问问自己——谁负责这个错误?如果这是用户,那么错误应妥善处理。我们想展示给用户一个不错的消息,而不是给他们500内部服务器错误。

不幸的是,没有no-try-catchESLint规则。最亲密的邻居的no-throw规则。确保你把错误负责任,在特殊情况下,当你希望程序崩溃。

建议ESLint配置:

规则:
fp / no-throw:警告

部分功能应用程序

图片由Unsplash

部分功能应用程序可能是有史以来最好的代码共享机制之一。它吹OOP依赖注入的水。代码你可以注入依赖项不通过的所有典型的OOP样板。

下面的示例包装了Axios库,是臭名昭著的抛出异常(而不是返回失败的反应)。使用这样的库是不必要的困难,特别是当使用异步/等待。

在接下来的例子中,我们利用局部套用和部分功能应用安全不安全的功能。

请注意,safeApiCall函数写成func = (params) = >(数据)= > {…}。这是一种常见的技术叫做局部套用在函数式编程中,它总是与部分函数应用相辅相成。这意味着函数函数调用时,参数个数返回另一个函数,实际执行工作。换句话说,函数部分应用参数个数

也可以写成:

常量函数= (params) = > (
(数据)= > {…}
);

注意,依赖项(参数个数)作为第一个参数传递和实际数据作为第二个参数传递。

使事情更容易,你可以利用saferrnpm包,它还与承诺,异步/等待:

几个小窍门

图片由Pierrick VAN-TROOSTUnsplash

这里有一些微小,但方便的技巧。他们不一定使代码更加可靠,但会使我们的生活更容易一些。有些是出名的,有些则不是。

一个小类型安全

是的,JavaScript并不是一个静态类型语言。然而,我们可以使用一个小技巧,从而使我们的代码更健壮标记函数参数的要求。下面的代码会抛出错误时所需的值没有通过。请注意,它不会为null工作,但仍然是一个伟大的防范未定义的值。

短路条件和评价

短路条件是众所周知的,是有用的在嵌套对象来访问值。

短路计算是有用的提供另一个值,如果一个值是美甲师:

const userCity = getUserCity(用户)| |“底特律”;

砰的一声爆炸! !

两次否定一个值是一个伟大的任何值转换为布尔值的方法。注意尽管falsey值将被转换为这可能并不总是你想要的东西。这个不应该用于数字0也将被转换成吗

调试与就地日志

我们可以利用短路和事实的结果console.log美甲师调试功能代码,甚至包括反应组件:

接下来是什么?

图片由马克西米利安WeisbeckerUnsplash

你真的需要代码的可靠性?这是由你来决定。贵机构将开发人员的生产力等同于JIRA故事完成的数量吗?你是工作在一个特性的数量工厂,值什么但是功能交付?希望不是,但如果他们这样做了,那么你可以考虑寻找一个更好的地方工作…

可能是压倒性的如果你试图应用从这篇文章。本文书签,偶尔回到它。每次,带走一个东西,你会刻意关注。并使相关ESLint规则来帮助你在你的旅程。

好运!

- - -

- - -

Baidu