[英]Evaluating escaped string literals in Javascript
考慮以下代碼片段:
var a = '\\555';
var b = '\555';
console.log(a, b); // outputs \555 -5
因此, a
的值具有轉義的反斜杠, b
已轉義的55(與“減號”或“破折號”的Unicode代碼點八進制等效的八進制等效項),並且尾隨的5
串聯到-
得到-5
。
現在我想以“評估/解碼”的價值的最好方式a
以這樣一種方式,它等於值b
。 任何幫助,將不勝感激。
eval
可以做到這一點(假設它是一個有效的字符串,並且不包含其他轉義符和引號):
var a = '\\555';
console.log(eval('"' + a '"'));
但確實,明確的解碼功能是一個更好的主意:
function decodeOctEscapes(x) {
return x.replace(/\\([0-7]{2})/g, (_, v) => String.fromCharCode(parseInt(v, 8)));
}
除了Regex以外,還有其他方法,但都不是理想的方法:
var a1 = '\\555';
// unsafe: only for trusted values
var a2 = eval('"' + a1 + '"');
var b1 = '\555';
// ES6 raw string; cannot be created on runtime
var b2 = String.raw`\555`;
console.log(a1===b2) // true
console.log(a2===b1) // true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.