有一个javascript表达式将name
变量分配给renamed
变量。
一个例外情况总是如此:
renamed = name == 'John' ? 'Johnny' : name;
但是,我想要两个例外情况:
是否可以将此表达式写入一个字符串?
renamed = (name == 'John' || name == 'Alex') ? <____> : name;
我需要用一个字符串来完成。
谢谢。
答案 0 :(得分:5)
(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
。
在第二种情况下,0
被评估为Falsy。所以,它会立即返回。这就是它打印0
。
同样的方式
console.log("John" && "Johny");
# Johny
John
将被评估为Truthy,因此Johny
也将被评估并返回。这就是为什么我们得到Johny
。
根据ECMA 5.1 Standard,对象的真实性将根据下表确定
+-----------------------------------------------------------------------+
| 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
,包括对象和数组。
答案 1 :(得分:3)
renamed = (name == 'john') ? 'johney': (name == 'alex'? 'alexander' : name);
答案 2 :(得分:2)
你可以试试这个:
renamed = (name == 'John' ? 'Johnny' : (name == 'Alex' ? 'Alexander' : name));