JavaScript 变量赋值:三元运算符 VS object.property ||价值
JavaScript variable assignment: ternary operator VS object.property || value
以下变量赋值在性能和可靠性方面有何不同:
var obj = {name: "Antonia"};
var foo = obj.name ? obj.name : "foo";
var baz = obj.name || "baz";
由于定义了obj.name,因此foo和baz都将包含"Antonia".
据我所知,除了 null、undefined、0 和 false 之外,代码对于 obj.name 值的行为应该相同。如果 属性 设置为这些值之一,foo 将包含 "foo" 并且 baz 被分配 "baz".
我是否遗漏了某种缺点?
您推荐使用哪一种?
谢谢!
PS: fiddle 玩 https://jsfiddle.net/a2rgvhzm/
尽管你给出的例子笨拙地实现了同样的事情。所以是的,在这种情况下它们是等价的。
var foo = obj.name ? obj.name : "foo";
这很尴尬,因为你问的是你是否有 object.name
,通常回答是 true/false。在这里,您要用成员本身或随机字符串来回答问题。所以 question/answer 不一致。
var baz = obj.name || "baz";
我已经看到它在生产中得到更广泛的使用,它更具声明性。而不是问你说的问题,"Assign baz
with the object name, oh, and in case it doesn't exist then assign baz
with the string "baz",我们知道肯定存在。"
您可能想要分析其中的每一个以回答您关于性能的问题。我希望这能澄清您关于最佳实践的问题。
以下变量赋值在性能和可靠性方面有何不同:
var obj = {name: "Antonia"};
var foo = obj.name ? obj.name : "foo";
var baz = obj.name || "baz";
由于定义了obj.name,因此foo和baz都将包含"Antonia".
据我所知,除了 null、undefined、0 和 false 之外,代码对于 obj.name 值的行为应该相同。如果 属性 设置为这些值之一,foo 将包含 "foo" 并且 baz 被分配 "baz".
我是否遗漏了某种缺点? 您推荐使用哪一种?
谢谢!
PS: fiddle 玩 https://jsfiddle.net/a2rgvhzm/
尽管你给出的例子笨拙地实现了同样的事情。所以是的,在这种情况下它们是等价的。
var foo = obj.name ? obj.name : "foo";
这很尴尬,因为你问的是你是否有 object.name
,通常回答是 true/false。在这里,您要用成员本身或随机字符串来回答问题。所以 question/answer 不一致。
var baz = obj.name || "baz";
我已经看到它在生产中得到更广泛的使用,它更具声明性。而不是问你说的问题,"Assign baz
with the object name, oh, and in case it doesn't exist then assign baz
with the string "baz",我们知道肯定存在。"
您可能想要分析其中的每一个以回答您关于性能的问题。我希望这能澄清您关于最佳实践的问题。