我希望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。

其他回答

是的,这将在Javascript中工作。您也可以这样做:

function func(a=10,b=20)
{
    alert (a+' and '+b);
}

func(); // Result: 10 and 20

func(12); // Result: 12 and 20

func(22,25); // Result: 22 and 25

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

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

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

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

是的,ES6完全支持使用默认参数:

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

or

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

但在ES5之前,您可以轻松做到这一点:

function read_file(file, delete_after) {
  var df = delete_after || false;
  // Code
}

这意味着如果值存在,则使用该值,否则,在执行相同操作的||操作之后使用第二个值。。。

注意:如果你将一个值传递给ES6,它们之间也有很大的区别,即使值是假的,也会被新值替换,比如null或“”。。。但是ES5只有在传递的值为真时才会被替换,这是因为工作方式。。。

作为一名长期的C++开发人员(web开发新手:),当我第一次遇到这种情况时,我在函数定义中进行了参数赋值,就像问题中提到的那样,如下所示。

function myfunc(a,b=10)

但要注意,它在不同浏览器之间并不一致。对我来说,它在我的桌面上运行,但在android上不运行。更安全的选择,正如上面提到的那样-

    function myfunc(a,b)
    {
    if (typeof(b)==='undefined') b = 10;
......
    }

这个答案的意图不是重复其他人已经提到的相同解决方案,而是告知函数定义中的参数分配可能在某些浏览器上有效,但不要依赖它。

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];

    }
}