首页 > 解决方案 > 用第三个参数替换字符串神秘地起作用

问题描述

我偶然发现了一些代码中的一些意外行为。

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

这会按预期输出字符串“a,b,c”。

后来在我发现的代码中

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

这也输出字符串“a,b,c”而没有任何错误,但我在任何文档中都找不到 String.prototype.replace() 采用 3 个参数。最后一个参数上的字符串似乎没有任何区别。到底是怎么回事?我错过了什么?

标签: javascriptreplace

解决方案


它之所以有效,是因为在 JavaScript 中,只是忽略了额外的参数。通常在代码中,该函数将获取所需的任何内容,并且不使用传入的任何额外参数,这就是为什么:

(这是在 NodeJS 中运行的)

> f = (a) => a * a
[Function: f]

> f(2)
4

> f(2, 3)
4

它与其他一些语言不同,例如在 Ruby 中:

> f(2)
 => 4

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

推荐阅读