JavaScript变量赋值:三元运算符VS object.property | |值

JavaScript变量赋值:三元运算符VS object.property | |值,javascript,performance,variable-assignment,Javascript,Performance,Variable Assignment,以下变量赋值在性能和可靠性方面有什么区别: 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”

以下变量赋值在性能和可靠性方面有什么区别:

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 to play aroud

你给出的例子虽然笨拙,但却达到了同样的效果。所以是的,在这种情况下它们是等价的

var foo=obj.name?对象名称:“foo”

这很尴尬,因为您正在询问是否有
对象.name
,通常回答为true/false。在这里,您使用成员本身或随机字符串回答问题。因此,问题/答案并不一致

var baz=obj.name | |“baz”
我认为这在生产中的应用更广泛,更具声明性。不要问问题,而是说,“用对象名分配
baz
,哦,如果它不存在,那么用字符串“baz”分配
baz
,我们知道它确实存在。”


您可能需要分析其中的每一个,以回答有关性能的问题。我希望这能澄清你关于最佳实践的问题

你举的例子虽然笨拙,但却达到了同样的效果。所以是的,在这种情况下它们是等价的

var foo=obj.name?对象名称:“foo”

这很尴尬,因为您正在询问是否有
对象.name
,通常回答为true/false。在这里,您使用成员本身或随机字符串回答问题。因此,问题/答案并不一致

var baz=obj.name | |“baz”
我认为这在生产中的应用更广泛,更具声明性。不要问问题,而是说,“用对象名分配
baz
,哦,如果它不存在,那么用字符串“baz”分配
baz
,我们知道它确实存在。”


您可能需要分析其中的每一个,以回答有关性能的问题。我希望这能澄清你关于最佳实践的问题

我认为,在这一点上,这只是个人偏好……我同意@Karl AndréGagnon的观点,or的版本对我来说更清楚,无论如何,你也应该澄清你的问题。听起来你可能在问关于规范用法的问题——在这种情况下,真的没有。在您的代码中,检查未定义变量的代码更清晰:还要注意,在es6中,可以有更好的方法来指定默认变量:。不要忘记,函数也可以有默认值(
function(foo=true){}
)。我认为,在这一点上,这只是个人偏好的问题……我同意@Karl AndréGagnon的观点,or版本对我来说更为清晰。你也应该澄清你的问题。听起来你可能在问关于规范用法的问题——在这种情况下,真的没有。在您的代码中,检查未定义变量的代码更清晰:还要注意,在es6中,可以有更好的方法来指定默认变量:。不要忘记函数也可以有默认值(
function(foo=true){}
)。