反斜杠+数字被解析为多进制数据解决方案----String.raw()

297 阅读1分钟

现象:

后端传来一条数据 pulice_system\1号现场.xlxs ,现在需要保存斜杠后面的数据

尝试:

乍一看很简单, 闭着眼睛一顿操作

var a = 'pulice_system\1号现场.xlxs'
console.log(a.split('\\'))

很快啊 直接运行 走起Y(^o^)Y

SyntaxError: Octal escape sequences are not allowed in strict mode.
    at ESMLoader.moduleStrategy (node:internal/modules/esm/translators:119:18)
    at ESMLoader.moduleProvider (node:internal/modules/esm/loader:475:14)
    at async link (node:internal/modules/esm/module_job:67:21)

嗯 看报错是严格模式导致的, 先拖到浏览器看看

这更不对了 不仅没有得到想要的结果,反而原文本斜杠处变成了\x01 这成了十六制了,越来越离谱了

解决:

明白了问题所在 ,我们尝试用 String.raw() 来解决它

var a = String.raw`pulice_system\1号现场.xlxs`
console.log(a.split('\\'))

// [ 'pulice_system', '1号现场.xlxs' ]

这个String.Raw() 为什么这么神奇呢? MDN 里讲的很明白了:

它的作用类似于 Python 中的字符串前缀 r,用来获取一个模板字符串的原始字符串

所以就不用担心会js 引擎转译为其他代码,这样的话问题就解决了