Apa yang menyebabkan kesalahan `string.split is not a function`?

110

Mengapa saya mendapatkan ...

TypeError Tidak Tertangkap: string.split bukan sebuah fungsi

... saat aku lari ...

var string = document.location;
var split = string.split('/');

Eric
sumber
2
document.locationadalah sebuah objek. Coba:var string=document.location.href
Teemu

Jawaban:

212

Ubah ini ...

var string = document.location;

untuk ini...

var string = document.location + '';

Ini karena document.locationadalah objek Lokasi . Default .toString()mengembalikan lokasi dalam bentuk string, sehingga penggabungan akan memicunya.


Anda juga bisa menggunakan document.URLuntuk mendapatkan string.

pengguna1106925
sumber
57
Bukankah lebih bersih untuk menelepon toString()daripada rangkaian hacky?
kapa
2
@ bažmegakapa: Ya, itu masalah preferensi. Ini + ''adalah trik yang cukup umum untuk pemaksaan tali, tetapi beberapa orang lebih suka toString()metode ini. Saya tidak akan menganggapnya lebih hacky daripada menggunakan unary +untuk konversi angka.
3
Itu sama jeleknya. Ada parseInt()dan parseFloat(). Ada juga Number(). Ini +lebih pendek tentu saja, tetapi kurang dapat dibaca untuk seseorang yang tidak terbiasa dengan kode hacky atau kurang berpengalaman.
kapa
yang + ''metode tidak mengubah apa pun bagi saya di Chrome Browser tapi toString()tidak.
Martin Schneider
@ MA-Maddin: Apakah Anda melakukannya my_string + "".split()? Jika demikian, Anda memerlukan tanda kurung karena +memiliki prioritas lebih rendah daripada .. Jadi seperti ini:(my_string + "").split()
67

mungkin

string = document.location.href;
arrayOfStrings = string.toString().split('/');

dengan asumsi Anda menginginkan url saat ini

chepe263
sumber
12

jalankan ini

// you'll see that it prints Object
console.log(typeof document.location);

Anda ingin document.location.toString()ataudocument.location.href

dstarh
sumber
Terima kasih. Saya tidak menyadari saya mengubah var saya dari string ke objek. Solusi Anda memberi saya ide untuk memeriksa kembali kode saya.
sg552
7

document.location bukanlah sebuah string.

Anda mungkin ingin menggunakan document.location.hrefatau document.location.pathnamesebaliknya.

Denys Séguret
sumber
lol. 4 jawaban (setidaknya) pada saat bersamaan. Saya seharusnya tidak melihat pertanyaan terbaru tentang SO :)
Denys Séguret
0

Dalam klausul jika, gunakan (). Sebagai contoh:

stringtorray = "xxxx,yyyyy,zzzzz";
if (xxx && (stringtoarray.split(',') + "")) { ...
Jonatas AstroPt
sumber