(name === 'John' && 'Johny') || (name === 'Alex' && 'Alexander') || name;
演示
这个解决方案之所以有效,是因为在 JavaScript 中,&&
运算符会计算左侧的表达式,如果它是假的,那么将返回该值,而右侧的表达式根本不会被计算。
如果左边的表达式计算为 Truthy,那么右边的表达式将被计算并返回结果。例如
console.log(1 && 2);
# 2
console.log(0 && 2);
# 0
它首先评估1
,它是 Truthy,所以它2
被评估并返回值。这就是它打印的原因2
。
在第二种情况下,0
被评估为 Falsy。所以,它立即被退回。这就是它打印的原因0
。
一样的方法
console.log("John" && "Johny");
# Johny
John
将被评估为真实,因此Johny
也将被评估并返回。这就是我们得到Johny
.
根据ECMA 5.1 标准,将根据下表确定对象的真实性
+-----------------------------------------------------------------------+
| Argument Type | Result |
|:--------------|------------------------------------------------------:|
| Undefined | false |
|---------------|-------------------------------------------------------|
| Null | false |
|---------------|-------------------------------------------------------|
| Boolean | The result equals the input argument (no conversion). |
|---------------|-------------------------------------------------------|
| Number | The result is false if the argument is +0, −0, or NaN;|
| | otherwise the result is true. |
|---------------|-------------------------------------------------------|
| String | The result is false if the argument is the empty |
| | String (its length is zero); otherwise the result is |
| | true. |
|---------------|-------------------------------------------------------|
| Object | true |
+-----------------------------------------------------------------------+
注意:最后一行,Object
包括对象和数组。