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('/');


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.


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


12

jalankan ini

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

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


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.


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(',') + "")) { ...
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.