javascript对象分配表达式-比较

javascript对象分配表达式-比较,javascript,expression,Javascript,Expression,假设我们有一个函数的可选参数,它可以是未定义的。两者之间有什么区别吗 options || (options = {}); 及 ??如果没有,你觉得哪一个更好?我的意思是更快或更可读?问题是-您将使用哪一行实现javascript中的可选参数?这两行完全不同: 在第一个表达式中,如果未定义,则该表达式与选项无关,而另一个表达式是语句。从逻辑上讲,它们都是相同的 options || (options = {}); 如果选项是真实值,则它将短路,不会转到下一部分。如果它是Falsy值,则会转到

假设我们有一个函数的可选参数,它可以是未定义的。两者之间有什么区别吗

options || (options = {});


??如果没有,你觉得哪一个更好?我的意思是更快或更可读?问题是-您将使用哪一行实现javascript中的可选参数?

这两行完全不同:


在第一个表达式中,如果未定义,则该表达式与选项无关,而另一个表达式是语句。

从逻辑上讲,它们都是相同的

options || (options = {});
如果选项是真实值,则它将短路,不会转到下一部分。如果它是Falsy值,则会转到下一部分,在该部分中创建空对象并将其指定给选项

同样的事情,第一个右手边被评估。如果选项为Truthy,则将其按原样指定给选项;如果选项为Falsy,则创建一个空对象并将其指定给选项


注意:如果options是一个函数的可选参数,并且如果它可以接受其他Falsy值,那么即使用户故意传递Falsy值,例如false、0、null,它仍然会使用空对象

这些行的上下文是什么?@RoyiNamir您的版本会导致语法错误…@tkoomzaaskz是抱歉。我以为有一个支架不见了,就打算把它修好。谢谢你的批改。我认为第二个更具可读性。@JNF我已经编辑了我的问题。上下文是,你在一个函数中,选项参数是可选的-你会如何处理它?好的,是的,我知道-但它们的效果是一样的,我想是的。问题是你更喜欢其中一种吗?这是错误的。首先,原始表达式仍然是语句。第二,如果第一个代码段为falsy,则它仍会将空对象分配给options。@tkoomzaaskz如果由于未传递而未定义options,则将为其分配一个值{}。你可以证实这一点。
options || (options = {});
options = options || {};