我希望JavaScript函数具有可选的参数,我在这些参数上设置了默认值,如果未定义值,则使用这些参数(如果传递了值,则忽略这些参数)。在Ruby中,您可以这样做:
def read_file(file, delete_after = false)
# code
end
这在JavaScript中有效吗?
function read_file(file, delete_after = false) {
// Code
}
我希望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];
}
}