为什么用javascript触摸这么简单的主题?反向字符串?真的像我们想象的那么简单吗?会给这个功能带来问题吗?只是谷歌如何反向与javascript字符串。
// The most easy way to reverse a stringvar text = "This is my text";
var reversedText = text.split('').reverse().join('');
// if you don't know how it works ...// string.split("") : split a string in every character and convert it to an array// something like : ["T", "h", "i", "s", " ", "i", "s", " ", "m", "y", " ", "t", "e", "x", "t"]// then // string.split("").reverse() // will reverse the array for// ["t", "x", "e", "t", " ", "y", "m", " ", "s", "i", " ", "s", "i", "h", "T"]// then // string.split("").reverse().join("") : Join every item in the array by ""console.log(reversedText);
// Outputs "txet ym si sihT"
在不影响代码性能的情况下执行此操作的最简单方法, 但是, 如果你的项目需要处理, 那么这条很棒的代码行有一些不好的事情, 你应该考虑
以下示例将显示此行代码失败的情况:
// Wrap the line in a function to understand bettervar reverseString = function(text){
return text.split("").reverse().join("");
};
// case 1reverseString('ma?ana man?ana');
// outputs : "ana?nam ana?am" (note the accent in the "a" character in the second word)// case 2reverseString('foo ???? bar');
// outputs 'rab ?? oof'// The `????` symbol dissapears, which shouldn't happen because our string changes !
为什么会这样?简单, 编纂。对于包含代理对的UTF-16字符串, 例如在基本多语言平面之外的字符, 该字符串将被错误地反转。如果你想详细了解一下(并想睡一会儿), 请阅读本文, 这将消除你的疑问。
如果你是受此问题困扰并必须解决的不幸者之一, 也许你并不是那么不幸。
由mathiasbynens创建和发布的esrever库可以轻松解决此问题。
如何使用它
该库有一个详细的文档, 说明如何在每个javascript环境(服务器端, 浏览器, shell)中包含和使用它。以下示例显示了如何在浏览器中使用它:
<
script src="http://www.srcmini.com/path/to/library/esrever.js">
<
/script>
<
script>
// esrever variable will be now available when you include the library
var input = 'Lorem ipsum ???? dolor sit ame??t.';
var reversed = esrever.reverse(input);
console.log(reversed);
// outputs '.te??ma tis rolod ???? muspi meroL'<
/script>
此函数接受一个字符串, 并返回该字符串的反向版本, 正确考虑了Unicode组合标记和星体符号的情况。
我以前怎么说, 如果你不使用UTF-16字符串, 则可以使用最知名的函数来反转字符串。
【如何使用JavaScript正确反转字符串】你是这个问题的受害者吗?在评论框中告诉我们此解决方案如何为你服务。
推荐阅读
- 如何在JavaScript中将Uint8Array转换为字符串
- 如何使用CSS在JavaScript控制台上自定义调试
- 什么是去抖动方法以及如何在JavaScript中使用它
- JS框架与VanillaJS(使用还是不使用框架())
- javascript中变量声明中LET和VAR有什么区别
- 我的软考历程网络规划师
- 软考过后看软考
- 网工在路上--一文弄懂MSTP协议
- 246期门诊集锦专家解析(软考重点难点及应试技巧)