"String.split bir işlev değil" hatasına neden olan nedir?


110

Neden alıyorum ...

Yakalanmamış TypeError: string.split bir işlev değil

... koştuğumda ...

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


2
document.locationbir nesnedir. Deneyin:var string=document.location.href
Teemu

Yanıtlar:


214

Bunu değiştir...

var string = document.location;

buna...

var string = document.location + '';

Bunun nedeni document.location, bir Location nesnesi olmasıdır . Varsayılan .toString(), konumu dize biçiminde döndürür, böylece birleştirme bunu tetikler.


document.URLBir dizge almak için de kullanabilirsiniz .


57
toString()Hacky birleştirme yerine aramak daha temiz olmaz mıydı ?
kapa

2
@ bažmegakapa: Evet, bu bir tercih meselesi. Bu + '', sicim zorlaması için oldukça yaygın bir numaradır, ancak bazı insanlar toString()yöntemi tercih eder . +Sayı dönüşümü için tekli kullanmaktan daha hantal olduğunu düşünmüyorum .

3
Bu kadar çirkin. Orada parseInt()ve parseFloat(). Ayrıca var Number(). +Hacky kodu veya az deneyimli alışık olmayan biri için elbette daha kısa, ancak daha az okunabilir.
kapa

+ ''yöntem Chrome Tarayıcıda benim için bir şey değişmez değil, toString()yok.
Martin Schneider

@ MA-Maddin: Yaptın mı my_string + "".split()? Öyleyse, +daha düşük önceliğe sahip olduğundan parantez gerekir .. (my_string + "").split()

67

olabilir

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

mevcut url'yi istediğinizi varsayarsak


12

bunu çalıştır

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

istiyorsun document.location.toString()ya dadocument.location.href


Teşekkür ederim. Var'ımı dizeden nesneye dönüştürdüğümü fark etmedim. Çözümünüz, kodumu tekrar kontrol etmem için bana bir fikir verdi.
sg552

7

document.location dizge değil.

Muhtemelen kullanmak istiyorsun document.location.hrefya da document.location.pathnameonun yerine.


lol. Aynı anda (en az) 4 cevap. SO ile ilgili en yeni sorulara bakmamalıyım :)
Denys Séguret

0

Clausule if, kullanın (). Örneğin:

stringtorray = "xxxx,yyyyy,zzzzz";
if (xxx && (stringtoarray.split(',') + "")) { ...
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.