我写了一个 JS 构造函数来反转字符串变量:
function ReverseString(string) {
this.str = string;
var size = this.str.length;
this.reverse = function () {
for(size; size >= 0; --size) {
console.log(this.str[size]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我在新的字符串对象()上调用反向方法时,"asd"它会产生以下输出:
undefined
d
s
a
Run Code Online (Sandbox Code Playgroud)
这undefined是从哪里来的?你能帮我消除这个吗?
问题length已经解释了。为了解决它,你可以使用:
function ReverseString(string) {\n this.str = string;\n var size = this.str.length;\n this.reverse = function () {\n while(size--) {\n console.log(this.str[size]);\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n反转字符串的另一种(更简单的方法)是将其拆分为一个数组,反转该数组,然后再次连接:
\nsomestring.split(\'\').reverse().join(\'\');\nRun Code Online (Sandbox Code Playgroud)\n应用于您的方法,类似于此代码片段:
\nfunction ReverseString(string) {\n this.str = string;\n var size = this.str.length;\n this.reverse = function () {\n while(size--) {\n console.log(this.str[size]);\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\r\nsomestring.split(\'\').reverse().join(\'\');\nRun Code Online (Sandbox Code Playgroud)\r\nconst result = document.querySelector(\'#result\');\nconst RString = stringFactory();\n\n// constructor\nconst myReversed = new ReverseString(\'hello world\');\nmyReversed.reverse();\n\n// factory\nresult.textContent += ` | `;\nRString(`Hello World`).printReversed(result);\n\nfunction ReverseString(string) {\n this.str = string;\n this.reverse = function() {\n const rev = this.str.split(\'\').reverse();\n rev.forEach(v => result.textContent += v);\n this.reversed = rev.join(\'\');\n };\n}\n\n// factory pattern\n// see also https://github.com/KooiInc/es-stringbuilder-plus\nfunction stringFactory() {\n return str => assignHelpers(str);\n \n function assignHelpers(str) {\n return {\n get reverse() { return str.split(\'\').reverse().join(``); },\n printReversed(elem) {\n str.split(\'\').reverse().forEach( l => \n elem.textContent += l );\n }\n };\n }\n}Run Code Online (Sandbox Code Playgroud)\r\n为了规避@Mark Baijens评论的问题(组合 Unicode 字符,又名代理对),现代解决方案 (es20xx) 可能是:
\n#result {\n letter-spacing: 0.5rem;\n font-size: 1.3rem;\n font-weight: bold;\n}Run Code Online (Sandbox Code Playgroud)\r\n<div id="result"></div>Run Code Online (Sandbox Code Playgroud)\r\nconst str = `foo bar ma\xc3\xb1a\xc3\xb1a`;\ndocument.querySelector(`#result`)\n .textContent = [...str].reverse().join(``);Run Code Online (Sandbox Code Playgroud)\r\n一开始,size将为 3(长度)。3因此,索引处没有任何内容undefined。您需要在 启动它length-1。
var size = this.str.length - 1;
Run Code Online (Sandbox Code Playgroud)