JavaScript正则replace用对象属性替换返回undefined问题排查
代码问题分析:字符串模板替换返回undefined
原代码
let data = {"phase": 32}; let title = "Phase {phase}"; consolo.log(title.replace(/\{([^\}]+)\}/g, data["$1"]));
输出情况
- 预期输出:
Phase 32 - 实际输出:
Phase undefined
问题原因
replace方法的参数逻辑错误String.replace()的第二个参数如果是字符串,$1才会被解析为正则捕获到的内容,但你这里直接写data["$1"],相当于直接访问data对象里名为"$1"的属性——这个属性根本不存在,所以返回undefined。正确的做法是传一个回调函数,在回调里用捕获到的键去取data对应的值。拼写错误
代码里的consolo.log多写了一个o,正确应该是console.log,虽然这不是输出undefined的直接原因,但会导致控制台报错,影响代码执行。
修正后的代码
let data = {"phase": 32}; let title = "Phase {phase}"; console.log(title.replace(/\{([^\}]+)\}/g, (match, key) => data[key]));
内容的提问来源于stack exchange,提问作者nguaduot
相关产品推荐
相关产品推荐

