我希望JavaScript函数具有可选的参数,我在这些参数上设置了默认值,如果未定义值,则使用这些参数(如果传递了值,则忽略这些参数)。在Ruby中,您可以这样做:

def read_file(file, delete_after = false)
  # code
end

这在JavaScript中有效吗?

function read_file(file, delete_after = false) {
  // Code
}

当前回答

如果您使用的是ES6+,则可以按以下方式设置默认参数:

功能测试(foo=1,bar=2){console.log(foo,bar);}测试(5);//foo被覆盖,bar保持默认参数

如果需要ES5语法,可以按以下方式执行:

功能测试(foo,bar){foo=foo||2;bar=bar||0;console.log(foo,bar);}测试(5);//foo被覆盖,bar保持默认参数

在上述语法中,使用OR运算符。如果可以将第一个值转换为真,OR运算符总是返回第一个值,如果不能,则返回右手边的值。当在没有相应参数的情况下调用函数时,JS引擎将参数变量(在我们的示例中为bar)设置为undefined。undefined然后转换为false,因此OR运算符返回值0。

其他回答

只需使用未定义的显式比较。

function read_file(file, delete_after)
{
    if(delete_after === undefined) { delete_after = false; }
}

我发现像这样简单的东西个人来说更加简洁和易读。

function pick(arg, def) {
   return (typeof arg == 'undefined' ? def : arg);
}

function myFunc(x) {
  x = pick(x, 'my default');
} 

答案是肯定的。事实上,有许多语言支持默认参数。Python就是其中之一:

def(a, enter="Hello"):
   print(a+enter)

尽管由于括号的原因,这是Python 3代码,但函数中的默认参数也可以在JS中使用。

例如,在您的案例中:

函数read_file(file,deleteAfter=false){console.log(deleteAfter);}read_file(“test.txt”);

但有时您实际上不需要默认参数。

您可以在函数开始后立即定义变量,如下所示:

函数read_file(文件){var deleteAfter=false;console.log(deleteAfter);}read_file(“test.txt”);

在我的两个示例中,它都返回相同的结果。但有时它们确实会有用,比如在非常先进的项目中。

因此,总之,可以在JS中使用默认参数值。但这与在函数开始后定义变量几乎是一样的。然而,有时它们仍然非常有用。正如您可能注意到的那样,默认参数值比在函数开始后定义参数的标准方法少1行代码。

编辑:这非常重要!这在IE中不起作用。请参阅文档。因此,对于IE,您必须使用“在函数顶部定义变量”方法。默认参数在IE中不起作用。

在ECMAScript 6中,您实际上可以编写您所拥有的内容:

function read_file(file, delete_after = false) {
  // Code
}

如果delete_after不存在或未定义,则会将其设置为false。您可以在Babel等转发器上使用像今天这样的ES6功能。

有关更多信息,请参阅MDN文章。

export const getfilesize = (bytes, decimals = 2) => {
    if (bytes === 0){ 
        return '0 Bytes';
    }else{
        const k = 1024;
        const dm = decimals < 0 ? 0 : decimals;
        const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
        const i = Math.floor(Math.log(bytes) / Math.log(k));
        return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];

    }
}