gpt4 book ai didi

javascript - 函数 replace() 异常行为的示例

转载 作者:行者123 更新时间:2023-11-29 18:51:01 25 4
gpt4 key购买 nike

为什么在下面的示例中,字符串 'a' 没有替换为函数定义?

在我看来,在下面的代码中

let f = function() {};
console.log('a'.replace('a', f)); //the result is: undefined

字符串 'a' 应该替换为这个 'function() {}'但被替换为 'undefined'

当我们对一个对象做同样的事情时:

let o = {};
console.log('a'.replace('a', o)); //the result is: [object Object]

执行到字符串的转换,'a' 被替换为 '[object Object]'

当我们强制转换为字符串时:

let f = function() {};
console.log('a'.replace('a', '' + f)); //the result is: function f() {}

也执行到字符串的转换,'a' 被替换为 function f() {}'

这是可执行代码:

let f = function() {};
console.log('a'.replace('a', f)); //the result is: undefined

let o = {}
console.log('a'.replace('a', o)); //the result is: [object Object]

console.log('a'.replace('a', '' + f)); //the result is: function f() {}

最佳答案

如果 replace() 的第二个参数是一个函数,则使用匹配的字符串调用该函数,并将该函数的返回值用作替换。这在替换正则表达式匹配时更有用,因为匹配的字符串可能会有所不同,并且您可以根据匹配的内容进行替换,但在替换文字字符串时仍然会发生这种情况。

console.log('a'.replace('a', function(x) {
console.log("function was called, arg = ", x);
return 'b';
}));

您可以使用 f.toString() 将函数转换为其源代码。

关于javascript - 函数 replace() 异常行为的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51348447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com