var.replace不是函数

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

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

编辑:

我解决了问题..对不起,我应该把代码也放在我如何调用它.。我意外地意识到传递的是表单字段本身的对象,而不是它的值。

428878 次浏览

You are not passing a string otherwise it would have a replace method. I hope you didnt type function trim(str) { return var.replace(blah); } instead of return str.replace.

My guess is that the code that's calling your trim function is not actually passing a string to it.

To fix this, you can make str a string, like this: str.toString().replace(...)
...as alper pointed out below.

Did you call your function properly? Ie. is the thing you pass as as a parameter really a string?

Otherwise, I don't see a problem with your code - the example below works as expected

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




trim('    hello   ');  // --> 'hello'

However, if you call your functoin with something non-string, you will indeed get the error above:

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

I fixed the problem.... sorry I should have put the code on how I was calling it too.... realized I accidentally was passing the object of the form field itself rather than it's value.

Thanks for your responses anyway. :)

You should probably do some validations before you actually execute your function :

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


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

probable issues:

  • variable is NUMBER (instead of string);
    num=35; num.replace(3,'three'); =====> ERROR
    num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!
    num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
  • variable is object (instead of string);
  • variable is not defined;

You should use toString() Method of java script for the convert into string before because replace method is a string function.

Replace wouldn't replace numbers. It replaces strings only.

This should work.

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

If you only want to trim the string. You can simply use "str.trim()"

In case of a number you can try to convert to string:

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

make sure you are passing string to "replace" method. Had same issue and solved it by passing string. You can also make it to string using toString() method.