Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript replaceAll函数:脚本太长,无法执行_Javascript_Html - Fatal编程技术网

Javascript replaceAll函数:脚本太长,无法执行

Javascript replaceAll函数:脚本太长,无法执行,javascript,html,Javascript,Html,这是我的代码: String.prototype.replaceAll = function(search, replace){ if(!replace){ return this; } while(this.indexOf(search) !== false){ this.replace(search, replace); } return this; }; 我想这应该行得通,但是不行 代码应该是这样工作的: var

这是我的代码:

String.prototype.replaceAll = function(search, replace){
    if(!replace){
        return this;
    }

    while(this.indexOf(search) !== false){
        this.replace(search, replace);
    }

    return this;
};
我想这应该行得通,但是不行

代码应该是这样工作的:

var x="hihi";
x.replaceAll("hi", "i");
最后,x的值应该是:

ii
我更喜欢这样做

String.prototype.replaceAll = function (search, replace) {
    var str = this;
    var pos = str.indexOf(search);
    while (pos > -1) {
        str = str.replace(search, replace);
        pos = str.indexOf(search);
    }
    return (str);
};

但是在您的情况下,您必须替换“>-1”的“!==false”,并从“this.replace(search,replace);”返回,您必须输入一个变量,因为“replace”函数不会更改“this”的值只返回新的字符串值。

您可以使用内置的replace函数来实现所需的功能,但需要将g标志附加到正则表达式中 i、 e

String#replace
返回一个新字符串;因此,
这个
永远不会改变。您还需要返回一个新字符串,因为字符串(我认为)是不可变的

String.prototype.replaceAll = function(search, replace){
    if(!replace){
        return this;
    }
    var str = this;

    while(~str.indexOf(search)){ // indexOf() doesn't return false
        str = str.replace(search, replace);
    }

    return str;
};

另外,请注意它是。

我发现这种方法更好:

String.prototype.replaceAll = function(search, replace){
    if(!replace){
        return this;
    }

    return this.replace(new RegExp(search, 'g'), replace);
};

我更喜欢按位not运算符与
indexOf

var a = ~'foo'.indexOf('o'), //-2, evaluates to true
    b = ~'foo'.indexOf('x'); // 0, evaluates to false
-1
将计算为false,因为
~-1===0
,但任何正索引将返回负数,其计算结果为
true
。因此,您可以简单地执行以下操作

while(~this.indexOf(search))
甚至

while(!!~this.indexOf(search))
对于真正的布尔值(这不是必需的)

while(!!~this.indexOf(search))