我已经定义了一个名为clean
String.prototype.clean = function() {
clean = new Array();
tokens = [
['&', '&'],
['"', '"'],
["'", '''],
['<', '<'],
['>', '>']
];
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;
}
在循环中调用时似乎有效,如下所示:
str = ["<script>", "<", ">"];
for(i = 0; i < 3; i++) {
console.log(str[i].clean());
}
第一次调用clean()
后,for循环中断,控制台如下所示:
[2/20/2014 8:19:26 PM] <script>
为什么会发生这种情况,我在这里做错了什么?
输出除外:
<script>
<
>
答案 0 :(得分:3)
这是一种非常快速的方法:
var __entityMap = {
"&": "&",
"<": "<",
">": ">",
'"': '"',
"'": ''',
"/": '/'
};
String.prototype.toHtml = function() {
return String(this).replace(/[&<>"'\/]/g, function (s) {
return __entityMap[s];
});
}
我还没有找到更快的方法......
答案 1 :(得分:3)
你有:
str = ["<script>", "<", ">"];
for(i = 0; i < 3; i++) {
console.log(str[i].clean());
}
在执行时创建全局变量 i 。然后你有:
String.prototype.clean = function() {
...
for(i = 0; i < this.length; i++) {
...
}
修改全局 i 的值。始终通过使用 var 声明将变量保存在适当的上下文中,例如:
for (var i = 0; ...; ...) {