为什么我不能将函数直接传递给替换方法
Why can't I pass the function directly into replace method?
我根本无法理解为什么输出的第二行和第三行彼此不同:
alphabet_ASCII = '';
for (i=65; i<=90; i++) {
alphabet_ASCII += i;
}
alphabet_ASCII += '<br>';
document.body.innerHTML += alphabet_ASCII;
document.body.innerHTML +=
alphabet_ASCII.replace(/'d{2}/g, x=>String.fromCharCode(x));
document.body.innerHTML +=
alphabet_ASCII.replace(/'d{2}/g, String.fromCharCode);
x=>String.fromCharCode(x)
和String.fromCharCode
有什么区别?
因为String.fromCharCode
接受多个参数,并且replace
调用回调的不仅仅是您期望的一个参数: 它调用回调:
- 所有匹配的文本
- 任何捕获组的内容(如果有)
- 发生此匹配的索引(偏移量)
- 正在操作的整个字符串
更多关于 MDN 的信息。
因此,在你的第二个例子中,String.fromCharCode
得到的论据比你的第一个例子多,并且尽其所能。在第一次回调时,String.fromCharCode
得到"65", 0, "6566676869707172737475767778798081828384858687888990"
,因此返回 "A'u0000'u0000"
(因为第二个参数为 0,第三个参数无效)。在第二次传递时,它得到"66", 2, "6566676869707172737475767778798081828384858687888990"
并返回"B'u0002'u0000"
,依此类推。
相关文章:
- 为什么javascript替换方法(没有regex)在angularjs表达式中不起作用来删除 
- Javascript替换方法有什么问题
- 转换红宝石字符串 gsub!到 JavaScript 字符串替换方法
- Javascript字符串替换方法在移动设备上不起作用
- 使用 Javascript 使用自定义替换方法替换 unicode chracter
- 对象的 Javascript 替换方法
- 正则表达式 - 替换方法从字符串中删除运算符产生不希望的结果
- 为什么我不能将函数直接传递给替换方法
- 是否存在替换方法无法从字符串中删除空格的情况
- 在 Javascript 中使用替换方法插入的正则表达式
- 正则表达式/替换方法Javascript
- javascript中的正则表达式和替换方法
- 使用字符串的替换方法时是否有长度限制
- javascript字符串替换方法.无法返回所需的字符串
- javascript字符串替换方法
- 如何使用JavaScript字符串替换方法来替换'+'签名
- 替换方法不能使用全局修饰符
- 如果第二个参数再次是替换方法,则JavaScript替换不起作用
- Regexp与变量:如何转换xml与属性的html使用javascript替换方法
- Javascript不区分大小写的替换方法