var.replace non è una funzione


133

Sto usando il codice qui sotto per provare a tagliare la stringa in Javascript ma sto ottenendo l'errore menzionato nel titolo:

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

Modificare:

Ho risolto il problema .... scusate avrei dovuto mettere il codice su come lo stavo chiamando anch'io .... mi sono reso conto che stavo accidentalmente passando l'oggetto del campo modulo stesso piuttosto che il suo valore.


21
strprobabilmente non è una stringa
Pekka,

A parte questo: ti mancano le virgolette intorno alla regexstringa stessa, il che potrebbe non essere comunque buono.
Concedi Thomas il

4
@MrDisappointment Javascript ha letterali espressioni regolari - non hanno bisogno di essere una stringa
Gareth

1
@Closure: potresti trovare (o desiderare di iniziare) una discussione su english.stackexchange.com/search?q=contractions
user113716

15
Usa str.toString().replace(/^\s+|\s+$/g,'')invece.
M Rostami,

Risposte:


213

La mia ipotesi è che il codice che chiama la tua trimfunzione non sta effettivamente passando una stringa ad essa.

Per risolvere questo problema, è possibile effettuare struna stringa, come questo: str.toString().replace(...)
... come Alper ha sottolineato di seguito.


39
str.toString()risolto il mio problema.
alper il

Bene, str.toString()è la soluzione solo se stai passando un valore corretto che può essere convertito con successo in una stringa; nel mio caso stavo passando completamente la cosa sbagliata. :)
Brett

Ho anche ricevuto lo stesso errore, ho provato aString () ma ho ricevuto l'errore: impossibile leggere la proprietà "toString" non è definita e lo stesso per "sostituisci"
Hitesh Kumar

90

probabili problemi:

  • la variabile è NUMBER (anziché stringa);
    num=35; num.replace(3,'three'); =====> ERROR
    num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!
    num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
  • la variabile è oggetto (anziché stringa);
  • la variabile non è definita;

1
Grazie Per questo, stavo affrontando un problema, dove, stavo ottenendo String in un oggetto typeof. Ho convertito quell'oggetto con toString (). E sta funzionando! Grazie!
Vishwajit R. Shinde

14

Sostituisci non sostituisce i numeri. Sostituisce solo le stringhe.

Questo dovrebbe funzionare.

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

Se vuoi solo tagliare la corda. Puoi semplicemente usare "str.trim ()"


6

Non stai passando una stringa altrimenti avrebbe un replacemetodo. Spero che tu non abbia digitato function trim(str) { return var.replace(blah); }invece di return str.replace.


6

Probabilmente dovresti fare alcune validazioni prima di eseguire effettivamente la tua funzione:

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

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

5

Hai chiamato correttamente la tua funzione? Vale a dire. la cosa che passi come parametro è davvero una stringa?

Altrimenti, non vedo un problema con il tuo codice: l'esempio seguente funziona come previsto

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


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

Tuttavia, se chiami il tuo functoin con qualcosa di non stringa, otterrai effettivamente l'errore sopra:

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

5

In caso di un numero puoi provare a convertire in stringa:

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

3

Dovresti usare toString () Metodo di script java per la conversione in stringa prima perché il metodo di sostituzione è una funzione di stringa.


1

Ho risolto il problema .... scusate avrei dovuto mettere il codice su come lo stavo chiamando anch'io .... mi sono reso conto che stavo accidentalmente passando l'oggetto del campo modulo stesso piuttosto che il suo valore.

Grazie comunque per le tue risposte. :)


1
Puoi modificare la domanda, è meglio che dare una risposta a te stesso. Oh, e mentre ci sei, scegli una delle persone simpatiche e accetta la loro risposta. :-)
Christopher Creutzig,

2
@Christopher: No; se lo ha risolto da solo, dovrebbe scrivere la sua risposta e accettarla. Questa è la migliore pratica. Porre soluzioni alle domande e accettare risposte arbitrarie non lo è.
Razze di leggerezza in orbita

@Tomalak: ci sono diverse risposte corrette qui, più vecchie di questa. Sono d'accordo che accettare la tua risposta se è la prima corretta è una cosa positiva ™, e certamente non volevo suggerire di mettere la soluzione nella domanda.
Christopher Creutzig,

@Christopher: la risposta accettata dovrebbe essere quella che contiene la soluzione utilizzata dall'OP.
Corse di leggerezza in orbita,

0

assicurati di passare la stringa per "sostituire" il metodo. Aveva lo stesso problema e risolto passando la stringa. Puoi anche farne una stringa usando il metodo toString ().

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.