我希望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
}
当前回答
对于任何有兴趣在MicrosoftEdge中使用代码的人,不要在函数参数中使用默认值。
function read_file(file, delete_after = false) {
#code
}
在该示例中,Edge将抛出错误“Expected')'”
为了避免这种使用
function read_file(file, delete_after) {
if(delete_after == undefined)
{
delete_after = false;
}
#code
}
截至2016年8月8日,这仍然是一个问题
其他回答
作为更新。。。使用ECMAScript 6,您最终可以在函数参数声明中设置默认值,如下所示:
function f (x, y = 7, z = 42) {
return x + y + z
}
f(1) === 50
参考文件:http://es6-features.org/#DefaultParameterValues
答案是肯定的。事实上,有许多语言支持默认参数。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中不起作用。
我注意到一些回答提到,使用默认参数对其他浏览器来说是不可移植的,但可以公平地指出,对于对现代JS功能支持有限的浏览器,可以使用像Babel这样的转换器将代码转换为ES5语法。
因此:
function read_file(file, delete_after = false) {
// Code
}
将被翻译成这样(在Babel REPL->中尝试https://babeljs.io/repl/):
"use strict";
function read_file(file) {
var delete_after =
arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
//Code...
}
当然,如果您无意使用转换,那么像其他人所演示的那样,在函数体中设置默认参数也是非常好的。
是-证明:
函数read_file(file,delete_after=false){//代码console.log({file,delete_after});}//测试读取文件(“A”);read_file(“B”,true);read_file(“C”,false);
根据语法
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
您可以定义正式参数的默认值。还可以使用typeof函数检查未定义的值。