Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数中的默认值_Javascript_Design Patterns_Functional Programming - Fatal编程技术网

Javascript 函数中的默认值

Javascript 函数中的默认值,javascript,design-patterns,functional-programming,Javascript,Design Patterns,Functional Programming,注意到为函数的参数设置默认值的两种模式: function fn ( val ) { val = val || 'default'; // (1) val || ( val = 'default' ); // (2) } 一般我用#1,刚找到第二个 哪个更好?它们之间有什么区别?还有其他选择吗?您的方法不会一直有效。例如,如果要将false作为参数传递,则表达式将被视为false,并且将为变量指定默认值 对于更稳健的方法,您可以使用: val = typeof val !==

注意到为函数的参数设置默认值的两种模式:

function fn ( val ) {
    val = val || 'default'; // (1)
    val || ( val = 'default' ); // (2)
}
一般我用#1,刚找到第二个


哪个更好?它们之间有什么区别?还有其他选择吗?

您的方法不会一直有效。例如,如果要将
false
作为参数传递,则表达式将被视为false,并且将为变量指定默认值

对于更稳健的方法,您可以使用:

val = typeof val !== 'undefined' ? val : "default";
使用此方法,您可以将
false
作为参数传递,甚至
null
typeof null==“object”


如果你有很多可选的参数,你也可以考虑把一个对象作为参数,并用缺省值在没有设置的属性上完成它。这更容易,因为您可以将值映射到属性名称,并且顺序不再重要。

我将使用第一个,第二个看起来至少让我困惑。如果“val”未定义,则第一个将“val”重新指定为“val”或“default”的值。第二个是“隐藏的如果”。val本身产生val的值。如果未定义,则执行or子句(将“default”赋值给val),如果未定义,or子句不会被执行,val的值也不再被使用。请注意,如果可以合法地使用与默认值不同的falsy参数值调用函数(例如,如果默认值为1,但可以使用0调用它),则这两种方法都不适用。您询问了其他选项:对于较新的JS程序员来说,如果(!val)val='default',则
如果(val==未定义)val='默认'