我在挖掘一些代码时发现了以下代码:
"string" != typeof myVar && (myVar = "");
我明白这里发生了什么。如果myVar不是字符串,则第一个条件的计算结果为true,因此评估第二个条件,导致myVar设置为“”。所以它基本上是以下内容的替代品:
if ("string" != typeof myVar)
myVar = "";
唯一可辨别的区别是两个策略的前者也是一个return语句,尽管我发现的代码没有使用返回的值。所以我想知道:
答案 0 :(得分:2)
只是想指出这个成语的用法不太明确,而且更清楚。
"string" != typeof myVar && (myVar = "");
我读过这个,实际上不得不将它转换为if / else。史蒂夫麦康奈尔认为,每个作品都应该有一行代码,我倾向于同意这一点,而这是违反法律的。另请注意,嵌入式副作用首先是冒险的,这非常令人震惊。
parameters = parameters || {};
var speed = parameters.speed || 60;
是IMO更明确的用途,部分原因在于它是如此成熟的习语。或
if(x && x.employer && x.employer.company === 'google')
明确使用这个习语(例如,如果你undefined.company
,你会得到一个例外)。