var.replace не є функцією


133

Я використовую наведений нижче код, щоб спробувати обрізати рядок у Javascript, але отримую помилку, зазначену в заголовку:

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

Редагувати:

Я виправив проблему .... вибачте, що я повинен був поставити код про те, як я його також називав .... зрозумів, що випадково передаю об'єкт самого форми форми, а не його значення.


21
strмабуть, не струна
Пекка

Як осторонь: вам не вистачає лапок навколо самої regexструни, що в будь-якому випадку може бути недобрим.
Грант Томас

4
@MrDisappointment У JavaScript є прямолінійні регулярні вирази - їм не потрібно бути рядком
Гарет

1
@Closure: Ви можете знайти (або хочете почати) обговорення на english.stackexchange.com/search?q=contractions
user113716

15
Використовуйте str.toString().replace(/^\s+|\s+$/g,'')замість цього.
M Rostami

Відповіді:


213

Я здогадуюсь, що код, який викликає вашу trimфункцію, насправді не передає їй рядок.

Щоб виправити це, ви можете зробити strрядок, як-от так: str.toString().replace(...)
... як вказував Альпер нижче.


39
str.toString()виправили мою проблему.
альпер

Ну, str.toString()це рішення тільки в тому випадку, якщо ви передаєте правильне значення, яке можна успішно перетворити на рядок; у моєму випадку я взагалі передав неправильну річ. :)
Бретт

Я також отримую таку ж помилку, я намагався toString (), але отримую помилку: не можу прочитати властивість "toString" не визначено і те саме для "замінити"
Hitesh Kumar

90

ймовірні проблеми:

  • змінна NUMBER (замість рядка);
    num=35; num.replace(3,'three'); =====> ERROR
    num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!
    num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
  • змінна є об'єктом (замість рядка);
  • змінна не визначена;

1
Дякую за це, я зіткнувся з проблемою, де я отримував String в typeof об'єкті. Я перетворив цей об’єкт за допомогою toString (). І це працює! Дякую!
Vishwajit R. Shinde

14

Заміна не замінить числа. Він замінює лише рядки.

Це має спрацювати.

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

Якщо ви хочете лише обрізати струну. Ви можете просто використовувати "str.trim ()"


6

Ви не передаєте рядок, інакше це був би replaceметод. Я сподіваюся, що ти не набрав function trim(str) { return var.replace(blah); }замість цього return str.replace.


6

Ви, ймовірно, повинні зробити деякі перевірки, перш ніж реально виконати свою функцію:

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

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

5

Ви правильно називали свою функцію? Тобто це те, що ви передаєте як параметр насправді рядок?

В іншому випадку я не бачу проблеми з вашим кодом - приклад нижче працює, як очікувалося

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


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

Однак, якщо ви зателефонуєте на свій функтоїн чимось нестроковим, ви дійсно отримаєте помилку вище:

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

5

У разі числа ви можете спробувати перетворити на рядок:

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

3

Ви повинні використовувати toString () метод Java-скрипту для перетворення в рядок раніше, тому що метод заміни є рядковою функцією.


1

Я виправив проблему .... вибачте, що я повинен був поставити код на те, як я його також називав .... зрозумів, що випадково передаю об'єкт самого форми форми, а не його значення.

Дякуємо за відповіді. :)


1
Ви можете редагувати питання, це краще, ніж давати відповідь самому собі. О, і поки ти на це, вибери одного з приємних людей і прийміть їх відповідь. :-)
Крістофер Кройцгіг

2
@Christopher: Ні; якщо він вирішив це сам, він повинен написати свою відповідь і прийняти її. Це ТАК найкраща практика. Не ставити рішення в питаннях і приймати довільні відповіді - це не так.
Гонки легкості по орбіті

@Tomalak: Тут є кілька правильних відповідей, старших за цей. Я погоджуюся, що прийняти власну відповідь, якщо вона є першою правильною, - це добра річ ™, і, звичайно, не хотіла пропонувати вирішити питання.
Крістофер Крейціг

@Christopher: Прийнята відповідь повинна бути такою, яка містить рішення, яке використовує ОП.
Гонки легкості по орбіті

0

переконайтеся, що ви передаєте рядок методу "заміни". Мав те саме питання і вирішив його, передаючи рядок. Ви також можете зробити його на рядку, використовуючи метод toString ().

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.