(name === 'John' && 'Johny') || (name === 'Alex' && 'Alexander') || name;
name
である場合John
、式の次の部分に進み、&&
を返しますJohny
。
name
である場合Alex
、最初のケースのようなものは を返しますAlexander
。
どちらも真でない場合は、name
をそのまま返します。
デモ
JavaScript では、&&
演算子は左側の式を評価し、それが偽の場合は値が返され、右側の式はまったく評価されないため、このソリューションは機能します。
左側の式が Truthy と評価された場合、右側の式が評価され、結果がそのまま返されます。例えば
console.log(1 && 2);
# 2
console.log(0 && 2);
# 0
最初に を評価し1
、Truthy であるため2
評価され、値が返されます。それが印刷する理由2
です。
2 番目のケースで0
は、Falsy と評価されます。ということで、即返却。それが印刷する理由0
です。
同じ方法
console.log("John" && "Johny");
# Johny
John
Truthy であると評価されるため、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
は、オブジェクトと配列の両方が含まれています。