Javascript IE9中的有效输出,但IE7/IE8中的未定义输出
我编写了一个简单的“replaceAll”函数,它扩展了String.prototypeJavascript 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
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("-"," "));