Javascript 字符串替换为神秘工作的第三个参数

Javascript 字符串替换为神秘工作的第三个参数,javascript,replace,Javascript,Replace,我在一些代码中偶然发现了一些意想不到的行为 var c = "\"a\", \"b\", \"c\""; c.replace(/"|\s/g, "") 这将按预期输出字符串“a、b、c” 后来在我找到的代码中 var c = "\"a\", \"b\", \"c\""; c.replace(/"|\s/g, "", "") 这也输出了字符串“a,b,c”,没有任何错误,但我在任何文档中都找不到包含3个参数的string.prototype.replace()。最后一个参数上的字符串似乎没有任

我在一些代码中偶然发现了一些意想不到的行为

var c = "\"a\", \"b\", \"c\"";
c.replace(/"|\s/g, "")
这将按预期输出字符串“a、b、c”

后来在我找到的代码中

var c = "\"a\", \"b\", \"c\"";
c.replace(/"|\s/g, "", "")

这也输出了字符串“a,b,c”,没有任何错误,但我在任何文档中都找不到包含3个参数的string.prototype.replace()。最后一个参数上的字符串似乎没有任何区别。发生了什么事?我遗漏了什么?

之所以有效,是因为在JavaScript中,额外的参数被忽略了。通常,在代码中,函数会接受所需的任何内容,并且不会使用传入的任何额外参数,因此这就是为什么:

(这是在NodeJS中运行的)

它不同于其他一些语言,例如Ruby:

> f(2)
 => 4

> f(2, 3)
ArgumentError: wrong number of arguments (given 2, expected 1)

您可以使用5000个参数调用
replace
,这样就可以了。
> f(2)
 => 4

> f(2, 3)
ArgumentError: wrong number of arguments (given 2, expected 1)