var.replace bukan fungsi

133

Saya menggunakan kode di bawah ini untuk mencoba memotong string dalam Javascript tetapi saya mendapatkan kesalahan yang disebutkan dalam judul:

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

Edit:

Saya memperbaiki masalah .... maaf saya harus meletakkan kode pada bagaimana saya memanggilnya juga .... menyadari bahwa saya tidak sengaja melewati objek dari bidang formulir itu sendiri daripada nilainya.

Brett
sumber
21
strmungkin bukan string
Pekka
Sebagai tambahan: Anda kehilangan tanda kutip di sekitar regexstring itu sendiri, yang mungkin tidak baik.
Berikan Thomas
4
@MrDisappointment Javascript memiliki ekspresi reguler literal - mereka tidak perlu berupa string
Gareth
1
@Closure: Anda mungkin menemukan (atau ingin memulai) diskusi di english.stackexchange.com/search?q=contractions
user113716
15
Gunakan str.toString().replace(/^\s+|\s+$/g,'')sebagai gantinya.
M Rostami

Jawaban:

213

Dugaan saya adalah bahwa kode yang memanggil trimfungsi Anda sebenarnya tidak meneruskan sebuah string ke sana.

Untuk memperbaikinya, Anda dapat membuat strstring, seperti ini:str.toString().replace(...)
... sebagai alper menunjukkan bawah.

ClosureCowboy
sumber
39
str.toString()memperbaiki masalah saya.
alper
Nah, str.toString()ini hanya solusi jika Anda memberikan nilai yang benar yang dapat berhasil dikonversi ke string; dalam kasus saya, saya melewati hal yang salah sama sekali. :)
Brett
Saya juga mendapatkan kesalahan yang sama, saya mencoba toString () tetapi mendapatkan error: tidak dapat membaca properti "toString" tidak terdefinisi dan sama untuk "ganti"
Hitesh Kumar
90

masalah yang mungkin terjadi:

  • variabelnya adalah NUMBER (bukan string);
    num=35; num.replace(3,'three'); =====> ERROR
    num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!
    num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
  • variabel adalah objek (bukan string);
  • variabel tidak didefinisikan;
T.Todua
sumber
1
Terima kasih Untuk ini, saya menghadapi masalah, Di mana, saya mendapatkan String di objek typeof. Saya mengonversi objek itu dengan toString (). Dan itu berhasil! Terima kasih!
Vishwajit R. Shinde
14

Ganti tidak akan mengganti angka. Ini hanya menggantikan string.

Ini seharusnya bekerja.

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

Jika Anda hanya ingin memotong string. Anda cukup menggunakan "str.trim ()"

Kareem
sumber
6

Anda tidak melewatkan string jika tidak maka akan memiliki replacemetode. Saya harap Anda tidak mengetik function trim(str) { return var.replace(blah); }bukan return str.replace.

meder omuraliev
sumber
6

Anda mungkin harus melakukan beberapa validasi sebelum Anda benar-benar menjalankan fungsi Anda:

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

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

Apakah Anda memanggil fungsi Anda dengan benar? Yaitu. adalah hal yang Anda lewati sebagai parameter benar-benar sebuah string?

Kalau tidak, saya tidak melihat masalah dengan kode Anda - contoh di bawah ini berfungsi seperti yang diharapkan

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


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

Namun, jika Anda memanggil functoin Anda dengan sesuatu yang bukan string, Anda memang akan mendapatkan kesalahan di atas:

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

Dalam hal angka Anda dapat mencoba mengonversi menjadi string:

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

Anda harus menggunakan toString () Metode skrip java untuk mengkonversi menjadi string sebelumnya karena metode ganti adalah fungsi string.

pengguna6619380
sumber
1

Saya memperbaiki masalah .... maaf saya harus meletakkan kode pada bagaimana saya memanggilnya juga .... menyadari bahwa saya tidak sengaja melewati objek dari bidang formulir itu sendiri daripada nilainya.

Terima kasih atas tanggapan Anda. :)

Brett
sumber
1
Anda dapat mengedit pertanyaan, itu lebih baik daripada memberikan jawaban kepada diri Anda sendiri. Oh, dan saat Anda melakukannya, pilih salah satu dari orang-orang baik dan terima jawaban mereka. :-)
Christopher Creutzig
2
@Christopher: Tidak; jika dia memecahkannya sendiri, dia harus menulis jawabannya dan menerimanya. Itu SO praktik terbaik. Menempatkan solusi dalam pertanyaan dan menerima jawaban sewenang-wenang tidak.
Lightness Races in Orbit
@ Tomalak: Ada beberapa jawaban yang benar di sini, lebih tua dari yang ini. Saya setuju bahwa menerima jawaban Anda sendiri jika itu adalah jawaban pertama yang benar adalah hal yang baik ™, dan tentu saja tidak ingin menyarankan untuk memasukkan solusi ke dalam pertanyaan.
Christopher Creutzig
@Christopher: Jawaban yang diterima haruslah yang berisi solusi yang digunakan OP.
Lightness Races dalam Orbit
0

pastikan Anda meneruskan string ke metode "ganti". Punya masalah yang sama dan menyelesaikannya dengan meneruskan string. Anda juga dapat membuatnya menjadi string menggunakan metode toString ().

ayaz-bin-mukhtar
sumber