Google Chrome控制台中同带斜杠字符串为何显示不同斜杠数量?
为什么同一带斜杠字符串在控制台显示不同斜杠数量?
核心原因很直接:document.regex是浏览器预留的特殊内置属性,和普通对象属性的处理逻辑完全不一样。
具体拆解:
普通对象属性的显示规则
当你把自定义对象挂载到普通JS对象上时,控制台打印的是字符串的原始存储状态:如果输入的是单个\,JS字符串里实际存的是单个反斜杠,但控制台会用双斜杠\\来表示(这是JS的转义语法,用来明确告诉开发者这是一个实际存在的单个反斜杠)。document.regex的特殊处理
document.regex是浏览器为兼容旧版API保留的特殊属性,它和正则表达式的底层逻辑绑定。当你给它赋值时,浏览器会自动把regex属性的字符串当作正则表达式源码来处理,做额外一次转义:
比如你输入单个\,原本存储的是\(控制台显示\\),经过浏览器的特殊处理后,会变成\\(实际存储双斜杠),控制台显示时就会变成\\\(三斜杠,代表实际存储的是双斜杠)。
验证方法
把代码改成挂载到普通对象,就能看到显示统一了:
function f1() { let regexDOM = document.getElementById("regex") // 换成普通对象,而非document let customObj = { enabled: true, regex: regexDOM.value } console.log(customObj) }
总结
差异完全是因为document.regex的特殊身份——它不是普通的自定义属性,浏览器对它的字符串值做了额外转义,才导致显示的斜杠数量变多。
内容的提问来源于stack exchange,提问作者Dinesh
相关产品推荐
相关产品推荐

