Javascript 导致循环提前退出的String.prototype

Javascript 导致循环提前退出的String.prototype,javascript,prototype,Javascript,Prototype,我已经定义了一个名为cleanString.prototype的方法 String.prototype.clean = function() { clean = new Array(); tokens = [ ['&', '&amp;'], ['"', '&quot;'], ["'", '&#039;'], ['<',

我已经定义了一个名为
clean
String.prototype的方法

String.prototype.clean = function() {       
        clean = new Array();
        tokens = [
            ['&', '&amp;'],
            ['"', '&quot;'],
            ["'", '&#039;'],
            ['<', '&lt;'],
            ['>', '&gt;']
        ];
        for(i = 0; i < this.length; i++) {      
            s = this[i];

            for(a = 0; a < tokens.length; a++) {
                if(tokens[a][0] == s) {
                    s = tokens[a][1];
                    break;
                }
            }

            clean.push(s);          

        }

        str =  clean.join("");
        return str;
    }
为什么会这样,我做错了什么

输出除外:

&lt;script&gt;
&lt;
&gt;

下面是一个非常快速的方法:

var __entityMap = {
    "&": "&amp;",
    "<": "&lt;",
    ">": "&gt;",
    '"': '&quot;',
    "'": '&#39;',
    "/": '&#x2F;'
};

String.prototype.toHtml = function() {
    return String(this).replace(/[&<>"'\/]/g, function (s) {  
        return __entityMap[s];
    });
}
var\uuuu entityMap={
“&”:“&;”,
"": "",
'"': '"',
"'": ''',
“/”:“/;”
};
String.prototype.toHtml=函数(){
返回字符串(this).replace(/[&“\/]/g,函数{
返回uu entityMap[s];
});
}

我还没有找到一个更快的方法……

这里有一个非常快速的方法来做同样的事情:

var __entityMap = {
    "&": "&amp;",
    "<": "&lt;",
    ">": "&gt;",
    '"': '&quot;',
    "'": '&#39;',
    "/": '&#x2F;'
};

String.prototype.toHtml = function() {
    return String(this).replace(/[&<>"'\/]/g, function (s) {  
        return __entityMap[s];
    });
}
var\uuuu entityMap={
“&”:“&;”,
"": "",
'"': '"',
"'": ''',
“/”:“/;”
};
String.prototype.toHtml=函数(){
返回字符串(this).replace(/[&“\/]/g,函数{
返回uu entityMap[s];
});
}
我还没有找到更快的方法……

你有:

str = ["<script>", "<", ">"];
for(i = 0; i < 3; i++) {
    console.log(str[i].clean());
}
你有:

str = ["<script>", "<", ">"];
for(i = 0; i < 3; i++) {
    console.log(str[i].clean());
}

实际上并没有回答这个问题。我知道。。。现在真的很忙,想深入研究代码…只是想分享一下,因为我发现它是如此。这是非常快的相比,最好的选择,我可以认为,如果在目前,但它会很有趣,看看它如何进行,如果全表的约是使用。我认为它仍然会很快。我创建了jsPerf来测试小型数组映射的类似(但不同)功能。这里有一个链接:我尽可能地使用这种方法。如果替换表达式是从映射创建的(比如只使用一次IIFE和加载时的闭包),这样可以减少维护(只有一个地方可以编辑和维护列表,避免使用全局变量),那就好了。但请理解这并不是生产代码。:-)实际上并没有回答这个问题。我知道。。。现在真的很忙,想深入研究代码…只是想分享一下,因为我发现它是如此。这是非常快的相比,最好的选择,我可以认为,如果在目前,但它会很有趣,看看它如何进行,如果全表的约是使用。我认为它仍然会很快。我创建了jsPerf来测试小型数组映射的类似(但不同)功能。这里有一个链接:我尽可能地使用这种方法。如果替换表达式是从映射创建的(比如只使用一次IIFE和加载时的闭包),这样可以减少维护(只有一个地方可以编辑和维护列表,避免使用全局变量),那就好了。但请理解这并不是生产代码。:-)
String.prototype.clean = function() {     
    ...
    for(i = 0; i < this.length; i++) {      
    ...
}
for (var i = 0; ...; ...) {