You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于JavaScript中标签模板调用replace方法的疑问

解析代码 'a'.replace.call1${/./}${alert}``

先拆解语法逻辑

这段代码用了标签模板的特殊写法,call被当作标签函数处理。模板字符串1${/./}${alert}会被JS引擎拆解为:

  • 字符串数组:['1', '', '']
  • 插值结果:正则/./、函数alert
    所以实际等价于执行:
String.prototype.replace.call('1', /./, alert)

关于alert的this指向问题

replace调用其第二个参数(函数)时,不会把自身的this(也就是这里的字符串'1')绑定给这个函数。在非严格模式下,普通函数直接调用时this默认指向全局对象(浏览器环境就是window),而alert本身就是window的方法,所以执行时this自然是window,和replace的this无关。

为什么alert会收到参数1

当replace的第二个参数是函数时,这个函数会被自动传入以下参数:

  • 第一个参数:匹配到的子串
  • 后续参数:正则捕获组(如果有)、匹配位置、原字符串
    这里正则/./匹配了字符串'1'的唯一字符'1',所以alert被调用时第一个参数就是'1',于是弹出了内容1。

内容的提问来源于stack exchange,提问作者Jackson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:12:07