使用 && 防止对象检索类型错误
当你检索一个类型为 `None` 的对象值时undefined,程序会因为 `TypeError` 而崩溃!所以务必先使用 ` ifInteger` 语句进行初始检查。更好的做法是,使用 `CREATE TABLE` 重构这段代码&&。👍
&&这种用法有时被称为守卫运算符,因为第一个表达式保护了第二个表达式。换句话说,只有当第一个表达式为真时,才会计算第二个表达式。
const forest = {}
forest.tree // undefined
forest.tree.seed // TypeError 😱
// This will prevent the TypeError but...
if(forest.tree) {
forest.tree.seed
}
// ✅Much better using &&
forest.tree && forest.tree.seed // undefined
了解 && 运算符
我一直以为它&&只是用来做布尔运算检查的,比如这样:
if(a && b) {
// do something
}
我以前从没想过可以用 ` &&is` 来求值或者生成某种值。所以当我第一次接触到这个守卫运算符时,我完全懵了。如果你也一样,别担心,理解它需要一些时间。最终帮助我理解它的资源是 Kyle Simpson 的《你不知道的 JavaScript》(You Don't Know JavaScript)这本书。
&&他是这样描述的:不要仅仅把它们看作逻辑运算符,而应该把它们看作选择运算符。它们不会产生布尔值或逻辑值,而是始终选择两个表达式中的一个。用他的话说,它们会选择两个操作数中的一个值。
&& 或 || 运算符产生的值不一定是布尔类型。产生的值始终是两个操作数表达式中其中一个表达式的值。
在你彻底放弃之前,我们来看一个例子:
const truthy = true;
const falsy = false;
const money = '💰';
truthy && money; // '💰'
falsy && money; // false
因此money,如果第一个表达式(左侧)为真,则会选中第二个表达式。否则,将选中第一个表达式,而不会计算第二个表达式(右侧)。这被称为短路求值,因为第二个表达式永远不会被计算。
以下是 Kyle Simpson 的著作《你不知道的 JS》中的定义:
如果左侧操作数足以确定运算结果,则不会对右侧操作数进行求值。因此,它被称为“短路运算”(因为如果可能,它会走捷径)。
真值
所以,本质上,第一个表达式(左侧)是真值检查器。如果它为真,则选择第二个表达式(右侧)。如果第一个表达式为假,则使用第一个表达式的值。为了理解什么是真值,我们来详细了解一下🤓
真值列表相当长。所以与其记住哪些是真值,不如记住假值列表来得简单。不在假值列表中的值都被认为是真值👍 (我写过另一篇关于假值的博文,你可以在这里阅读)。
// JS Essentials: Falsy Values
false
undefined
null
NaN
0 or +0 or -0
"" or '' or `` (empty string)
// Everything else is truthy
使用重构if条件语句&&
让我们来看另一个例子,看看 guard 运算符如何也能用于重构条件语句。
const steak = '🥩'
function cook() = {...}
// Most people use `if`
if(steak) {
cook()
}
// Refactored using &&
steak && cook(); // `cook` only gets called if `steak` is true
这里有一个值得思考的问题:
someCondition && doSomething()
谢谢:@marcdel
提案可选链
这真是太令人兴奋了!ECMAScript 团队或 JavaScript 委员会正在提议引入“可选链式调用”语法。我以前用 C# 的时候,这个功能对我来说简直是颠覆性的。我一直都希望 JavaScript 也能有类似的功能。真心希望这个提案能够通过!🙌
使用建议的可选链式语法重写我们的示例🤩:
// Current
forest.tree && forest.tree.seed
// Proposal
forest.tree?.seed
请勿在您的应用中使用此功能,目前不支持此功能。
点击此处了解更多提案详情。
资源
感谢阅读❤
欢迎关注!Instagram | Twitter | Facebook | Medium |博客
