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.


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.


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;

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 ()"


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.


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,'');
}

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

5

Dalam hal angka Anda dapat mencoba mengonversi menjadi string:

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

3

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


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. :)


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 ().

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.