我希望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
}
当前回答
答案是肯定的。事实上,有许多语言支持默认参数。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中不起作用。
其他回答
只需使用未定义的显式比较。
function read_file(file, delete_after)
{
if(delete_after === undefined) { delete_after = false; }
}
这个解决方案在js中很适用:
function read_file(file, delete_after) {
delete_after = delete_after || false;
// Code
}
作为更新。。。使用ECMAScript 6,您最终可以在函数参数声明中设置默认值,如下所示:
function f (x, y = 7, z = 42) {
return x + y + z
}
f(1) === 50
参考文件:http://es6-features.org/#DefaultParameterValues
在ECMAScript 6中,您实际上可以编写您所拥有的内容:
function read_file(file, delete_after = false) {
// Code
}
如果delete_after不存在或未定义,则会将其设置为false。您可以在Babel等转发器上使用像今天这样的ES6功能。
有关更多信息,请参阅MDN文章。
如果您想使用最新的ECMA6语法,请使用此选项:
函数myFunction(someValue=“这是默认值!”){console.log(“someValue-->”,someValue);}myFunction(“不是默认值”)//调用没有默认值的函数myFunction()//使用默认值调用函数
它被称为默认函数参数。如果没有传递值或未定义,它允许使用默认值初始化形式参数。注意:它不适用于Internet Explorer或较旧的浏览器。
为了获得最大可能的兼容性,请使用以下选项:
函数myFunction(someValue){someValue=(someValue==未定义)?“这是默认值!”:someValue;console.log(“someValue-->”,someValue);}myFunction(“不是默认值”)//调用没有默认值的函数myFunction()//使用默认值调用函数
这两个函数具有完全相同的行为,因为这些示例依赖于这样一个事实:如果在调用该函数时没有传递任何参数值,则参数变量将是未定义的。