为JavaScript函数设置默认参数值
我希望JavaScript函数具有可选参数,我可以将其设置为默认值,如果值未定义,则会使用该参数。 在Ruby中,你可以这样做:
def read_file(file, delete_after = false)
# code
end
这是否工作在JavaScript?
function read_file(file, delete_after = false) {
// Code
}
从ES6 / ES2015开始,默认参数在语言规范中。
function read_file(file, delete_after = false) {
// Code
}
只是工作。
参考:默认参数 - MDN
如果没有值或未定义传递,默认函数参数允许用默认值初始化形式参数。
您还可以通过解构模拟默认的命名参数:
// the `= {}` below lets you call the function without any parameters
function myFor({ start = 5, end = 1, step = -1 } = {}) { // (A)
// Use the variables `start`, `end` and `step` here
···
}
Pre ES2015 ,
有很多方法,但这是我首选的方法 - 它可以让你传入任何你想要的东西,包括false或null。 ( typeof null == "object"
)
function foo(a, b) {
a = typeof a !== 'undefined' ? a : 42;
b = typeof b !== 'undefined' ? b : 'default_b';
...
}
function read_file(file, delete_after) {
delete_after = delete_after || "my default here";
//rest of code
}
这就赋予delete_after
的价值delete_after
如果它不是一个falsey值,否则它的字符串分配"my default here"
。 有关更多详细信息,请查看Doug Crockford对语言的调查,并查看有关运营商的部分。
如果您想传递falsey值,即false
, null
, undefined
, 0
或""
,则此方法不起作用。 如果你需要传入错误的值,你需要在Tom Ritter的答案中使用该方法。
在处理函数的许多参数时,允许使用者传递对象中的参数参数,然后将这些值与包含函数的默认值的对象合并在一起通常很有用
function read_file(values) {
values = merge({
delete_after : "my default here"
}, values || {});
// rest of code
}
// simple implementation based on $.extend() from jQuery
function merge() {
var obj, name, copy,
target = arguments[0] || {},
i = 1,
length = arguments.length;
for (; i < length; i++) {
if ((obj = arguments[i]) != null) {
for (name in obj) {
copy = obj[name];
if (target === copy) {
continue;
}
else if (copy !== undefined) {
target[name] = copy;
}
}
}
}
return target;
};
使用
// will use the default delete_after value
read_file({ file: "my file" });
// will override default delete_after value
read_file({ file: "my file", delete_after: "my value" });
我发现一些简单的事情要更简洁明了。
function pick(arg, def) {
return (typeof arg == 'undefined' ? def : arg);
}
function myFunc(x) {
x = pick(x, 'my default');
}
链接地址: http://www.djcxy.com/p/155.html
上一篇: Set a default parameter value for a JavaScript function
下一篇: JavaScript closure inside loops – simple practical example