Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.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 var.replace不是一个函数_Javascript - Fatal编程技术网

Javascript var.replace不是一个函数

Javascript var.replace不是一个函数,javascript,Javascript,我正在使用下面的代码尝试修剪Javascript中的字符串,但遇到了标题中提到的错误: function trim(str) { return str.replace(/^\s+|\s+$/g,''); } 编辑: 我解决了这个问题。。。。对不起,我也应该把代码写在我怎么称呼它上。。。。意识到我无意中传递了表单字段本身的对象,而不是它的值。您没有传递字符串,否则它将有一个replace方法。我希望您没有键入function trim(str){return var.replace(bl

我正在使用下面的代码尝试修剪Javascript中的字符串,但遇到了标题中提到的错误:

function trim(str) {
    return str.replace(/^\s+|\s+$/g,'');
}
编辑:


我解决了这个问题。。。。对不起,我也应该把代码写在我怎么称呼它上。。。。意识到我无意中传递了表单字段本身的对象,而不是它的值。

您没有传递字符串,否则它将有一个
replace
方法。我希望您没有键入
function trim(str){return var.replace(blah);}
而不是
return str.replace

我猜调用
trim
函数的代码实际上并没有向它传递字符串

要解决此问题,可以将
str
设置为字符串,如下所示:
str.toString().replace(…)


…如下所述。

您是否正确调用了函数?作为参数传递的东西真的是字符串吗

否则,我看不出您的代码有任何问题-下面的示例按预期工作

function trim(str) {
    return str.replace(/^\s+|\s+$/g,'');
}


trim('    hello   ');  // --> 'hello'
但是,如果您使用非字符串调用function,则确实会出现上述错误:

trim({});  // --> TypeError: str.replace is not a function

我解决了这个问题。。。。对不起,我也应该把代码写在我怎么称呼它上。。。。意识到我无意中传递了表单字段本身的对象,而不是它的值


谢谢您的回复。:)

在实际执行函数之前,您可能应该进行一些验证:

function trim(str) {
    if(typeof str !== 'string') {
        throw new Error('only string parameter supported!');
    }

    return str.replace(/^\s+|\s+$/g,'');
}
可能的问题:
  • 变量是编号(而不是字符串);
    num=35;num.replace(3,'three');====>错误

    num=35;num.toString().replace(3,'three');==>正确
    
    num='35';num.replace(3,'three');====>正确
  • 变量是对象(而不是字符串)
  • 变量未定义
之前,您应该使用java脚本的toString()方法将其转换为字符串,因为replace方法是一个字符串函数

替换不会替换数字。它只替换字符串

这应该行得通

function trim(str) {
    return str.toString().replace(/^\s+|\s+$/g,'');
}

如果你只想修剪绳子。您只需使用“str.trim()”

就可以尝试将数字转换为字符串:

var stringValue = str.toString();
return stringValue.replace(/^\s+|\s+$/g,'');

确保将字符串传递给“replace”方法。有同样的问题,通过传递字符串解决了它。您还可以使用toString()方法将其设置为字符串。

str
可能不是字符串作为旁白:您在
regex
字符串本身周围缺少引号,这可能并不好。@Javascript有文字正则表达式-它们不需要是字符串string@Closure:您可能会发现(或希望开始)使用
str.toString().replace(/^\s+\s+$/g')
进行讨论。您可以编辑问题,这比自己给出答案要好。哦,当你这么做的时候,选择一个好人并接受他们的答案。:-)@克里斯托弗:没有;如果他自己解决了,他应该写下他的答案并接受它。这是最佳实践。把答案放在问题中,接受任意的答案是不正确的。@Tomalak:这里有几个正确的答案,比这个答案更古老。我同意接受你自己的答案,如果它是第一个正确的是一件好事™, 当然,我不想建议在问题中加入解决方案。@Christopher:被接受的答案应该是包含OP使用的解决方案的答案。为此,我遇到了一个问题,我在一个typeof对象中得到了字符串。我用toString()转换了那个对象。它正在工作!谢谢大家!
str.toString()
修复了我的问题。好吧,
str.toString()
是唯一的解决方案,如果你传递了一个可以成功转换为字符串的正确值;在我的情况下,我传递的东西完全是错误的我也得到了同样的错误,我尝试了toString(),但得到的错误是:无法读取属性“toString”是未定义的,与“replace”相同,这是一个很好的猜测!结果恰恰是我所缺少的。通过添加
.toString()
,效果非常好。