使用 && 作为 IF 语句的替代

use*_*515 5 javascript conditional readability

在挖掘一些代码时,我发现了以下代码段:

"string" != typeof myVar && (myVar = "");
Run Code Online (Sandbox Code Playgroud)

我明白这里发生了什么。如果 myVar 不是字符串,则第一个条件的计算结果为 true,因此计算第二个条件,导致 myVar 设置为 ""。所以它本质上是以下内容的替代品:

if ("string" != typeof myVar)
    myVar = "";
Run Code Online (Sandbox Code Playgroud)

唯一可辨别的区别是两种策略中的前者也是返回语句,尽管我找到的代码没有使用返回值。所以我想知道:

  1. 这两种策略有什么优点或缺点吗?
  2. 如果第一个策略的唯一优点是能够返回一个值,那么我发现的代码片段是否被认为是糟糕的编程,因为它更难阅读?

dje*_*lin 5

只是想指出这个习语的用法不太明确,但更明确。

"string" != typeof myVar && (myVar = "");
Run Code Online (Sandbox Code Playgroud)

我读了这篇文章,实际上不得不在我的脑海中将其转换为 if/else。Steve McConnell 认为每项工作应该只有一行代码,我倾向于同意这一点,但这是可笑的违反。另请注意,嵌入的副作用首先是有风险的,这是非常令人震惊的。

parameters = parameters || {};
var speed = parameters.speed || 60;
Run Code Online (Sandbox Code Playgroud)

IMO 是一个更清晰的用法吗,部分原因是它是一个非常成熟的习语。或者

if(x && x.employer && x.employer.company === 'google') 
Run Code Online (Sandbox Code Playgroud)

是对该习语的明确使用(例如,如果这样做undefined.company,您将得到一个例外)。