gpt4 book ai didi

javascript - 为什么在附加特殊字符时此函数会附加到我的输出中

转载 作者:搜寻专家 更新时间:2023-11-01 05:19:02 25 4
gpt4 key购买 nike

将我的文本“加粗”(将普通字符转换为相应的特殊“粗体(衬线)”符号的正确方法是什么?

当我在浏览器中以 boldify("Hello World!") 运行它时,我期望:

"𝐇𝐞𝐥𝐥𝐨 𝐖𝐨𝐫𝐥𝐝!"

但是我得到了(当在 Opera 的谷歌开发者控制台中运行时):

"𝐇𝐞𝐥𝐥𝐨 𝐖𝐨𝐫𝐥𝐝!function(_0x3298c7,_0x4d4daa){return this[_0x543a('0x9f')](new RegExp(_0x3298c7,'g'),_0x4d4daa);}"

最后附加的 javascript 函数字符串是什么?为什么会这样?

函数:

function boldify(txt) {
let input = txt;
let bold_input = "";
let font = {
'q': [55349, 56362],
'w': [55349, 56368],
'e': [55349, 56350],
'r': [55349, 56363],
't': [55349, 56365],
'z': [55349, 56371],
'u': [55349, 56366],
'i': [55349, 56354],
'o': [55349, 56360],
'p': [55349, 56361],
'a': [55349, 56346],
's': [55349, 56364],
'd': [55349, 56349],
'f': [55349, 56351],
'g': [55349, 56352],
'h': [55349, 56353],
'j': [55349, 56355],
'k': [55349, 56356],
'l': [55349, 56357],
'y': [55349, 56370],
'x': [55349, 56369],
'c': [55349, 56348],
'v': [55349, 56367],
'b': [55349, 56347],
'n': [55349, 56359],
'm': [55349, 56358],
'Q': [55349, 56336],
'W': [55349, 56342],
'E': [55349, 56324],
'R': [55349, 56337],
'T': [55349, 56339],
'Z': [55349, 56345],
'U': [55349, 56340],
'O': [55349, 56328],
'P': [55349, 56334],
'A': [55349, 56335],
'S': [55349, 56338],
'D': [55349, 56323],
'F': [55349, 56325],
'G': [55349, 56326],
'H': [55349, 56327],
'J': [55349, 56329],
'K': [55349, 56330],
'L': [55349, 56331],
'Y': [55349, 56344],
'X': [55349, 56343],
'C': [55349, 56322],
'V': [55349, 56341],
'B': [55349, 56321],
'N': [55349, 56333],
'M': [55349, 56332],
'1': [55349, 57295],
'2': [55349, 57296],
'3': [55349, 57297],
'4': [55349, 57298],
'5': [55349, 57299],
'6': [55349, 57300],
'7': [55349, 57301],
'8': [55349, 57302],
'9': [55349, 57303],
'0': [55349, 57294]
};
for (i in input) {
let char = input[i];
let char_code = font[char];
if (char_code !== undefined) {
let bold_char = String.fromCharCode(char_code[0], char_code[1]);
bold_input += bold_char;
} else {
bold_input += char;
}
}
return (bold_input);
}

console.log(boldify("Hello World!"))

最佳答案

要么不使用 for(i in input) 构造 - 最直接的替换将是 for ... of

for (const char of input) { ... }

... 或检查它是否只处理字符,而不处理字符串的其他属性...

for (i in input) if (input.hasOwnProperty(i)) { ... }

否则它将开始收集添加到 String 原型(prototype)的函数。第一个函数 - formatUnicorn 在我的例子中 (Chrome) - 被添加到输出中。


作为旁注,函数可以大大简化。例如,相同的数字 - 55349 - 用作所有粗体的第一个字符代码;将它添加到“映射”数组的每个元素是浪费时间和空间,因为它可以在 String.fromCharCode(...) 调用中内联。

但即使是数组在这里也有点浪费:如果你注意,你会发现只有三个序列 - 一个用于 a-z,另一个用于 A-Z,最后是 0-9。应存储这些值,但不存储中间值。

最后,您可以使用简单的正则表达式仅定位您要替换的字符。

例如(只是一个概念):

function _getAdditionalCode(char) {
const charCode = char.charCodeAt(0);
return charCode + (
charCode >= 97 ? 56346 - 97 : // 'a'..'z'
charCode >= 65 ? 56320 - 65 : // 'A'..'Z'
57294 - 48 // '0'..'9'
);
}

function boldify(txt) {
return txt.replace(/[a-zA-Z0-9]/g,
ch => String.fromCharCode(55349, _getAdditionalCode(ch)));
}

关于javascript - 为什么在附加特殊字符时此函数会附加到我的输出中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57927706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com