Javascript IE9中的有效输出,但IE7/IE8中的未定义输出

Javascript IE9中的有效输出,但IE7/IE8中的未定义输出,javascript,internet-explorer,Javascript,Internet Explorer,我编写了一个简单的“replaceAll”函数,它扩展了String.prototype String.prototype.replaceAll = function (removalChar, insertionChar) { var output = ""; for (var i = 0; i < this.length; i++) { if(this[i] == removalChar) { output += insertio

我编写了一个简单的“replaceAll”函数,它扩展了String.prototype

String.prototype.replaceAll = function (removalChar, insertionChar) {
    var output = "";
    for (var i = 0; i < this.length; i++) {
        if(this[i] == removalChar) {
            output += insertionChar;
        }
        else {
            output += this[i];
        }
    }
    return output;
}

在包括IE9在内的所有浏览器中,我的测试代码都会发出警报
Hello 1 2 3

但在IE7和IE8中,我得到的输出是这样的:
UnfinedUndefinedUndefinedUndefinedUndefinedUndefinedUndefinedUndefinedUndefinedUndefined…


jsFiddle: (在IE7/IE8中尝试此功能)



我怎么可能重写该函数以确保它在IE7/8上工作,而不破坏它在其他浏览器上的行为

您无法使用IE7/8中的
此[i]
访问字符串字符。使用
.charAt(i)
,如下所述:


更新的小提琴(在IE8中测试):

我刚刚用
this.charAt(I)
替换了
this[I]


有疑问的是,对于为什么您更喜欢使用
charAt
而不是
string[index]
,我们给出了一些很好的理由。后者不是ECMAScript 3的一部分。

请验证以下内容:-
String.prototype.replaceAll=函数(removalChar,insertionChar){
var输出=”;
var res=本次拆分(“”);
for(var i=0;i
感谢您的快速回复!我决定“接受”Saturnix最详细的答案,但Teemu和wiz kid的答案也很酷!
var test = "Hello-1-2-3";
alert(test.replaceAll("-"," "));
String.prototype.replaceAll = function (removalChar, insertionChar) {
    var output = "";
    var res = this.split('');
    for (var i = 0; i < this.length; i++) {
        if(res[i] == removalChar) {
            output += insertionChar;
        }
        else {
            output += res[i];
        }
    }
    return output;
}


var test = "Hello-1-2-3";
//alert(test.replace("-"," "));
alert(test.replaceAll("-"," "));