javascript - 用第三个参数替换字符串神秘地起作用
问题描述
我偶然发现了一些代码中的一些意外行为。
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 个参数。最后一个参数上的字符串似乎没有任何区别。到底是怎么回事?我错过了什么?
解决方案
它之所以有效,是因为在 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)
推荐阅读
- java - 绝对 uri:[http://java.sun.com/jsp/jstl/core] 无法在 web.xml 或随此应用程序部署的 jar 文件中解析
- iframe - iframe ie11中的href链接不起作用
- haskell - Haskell中由常量参数化的数据类型
- python - 哪个 Chef Python 食谱可以与 Chef 14 及更高版本一起使用?
- node.js - 使用 nodeJs 在 heroku 上部署:我得到 503 状态 - 服务不可用 NPM_CONFIG_LOGLEVEL=error
- python - 没有名为 pipreqs.__main__ 的模块;'pipreqs' 是一个包,不能直接执行
- javascript - Javascript 按测试和布尔值过滤
- react-native - React Native WEB 的可拖动平面列表
- java - 如何解决嵌套异常是 java.lang.NoClassDefFoundError: org/eclipse/jetty/server/session/SessionDataStore?
- google-sheets - 我可以将行标题转换为 Google 表格中的重复行值吗?