Co powoduje błąd „string.split nie jest funkcją”?

110

Dlaczego dostaję ...

Uncaught TypeError: string.split nie jest funkcją

... kiedy biegnę ...

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

Eric
źródło
2
document.locationjest przedmiotem. Spróbuj:var string=document.location.href
Teemu

Odpowiedzi:

214

Zmień to...

var string = document.location;

do tego...

var string = document.location + '';

Dzieje się tak, ponieważ document.locationjest to obiekt lokalizacji . Wartość domyślna .toString()zwraca lokalizację w postaci ciągu, więc konkatenacja to wyzwoli.


Możesz również użyć, document.URLaby uzyskać ciąg.

user1106925
źródło
57
Czy nie byłoby czystsze wywołanie toString()zamiast hakerskiej konkatenacji?
kapa
2
@ bažmegakapa: Tak, to kwestia preferencji. + ''Jest dość powszechne trick strun przymusu, ale niektórzy ludzie wolą toString()metodę. Nie uważałbym tego za bardziej hakerskie niż użycie jednostki jednoargumentowej +do konwersji liczb.
3
To jest równie brzydkie. Jest parseInt()i parseFloat(). Jest też Number(). +Jest krótszy oczywiście, ale mniej czytelny dla kogoś nie jest używany do kodu hacky lub mniej doświadczonych.
kapa,
+ ''metoda nie robi nic dla mnie zmienić w przeglądarce Chrome, ale toString()nie.
Martin Schneider
@ MA-Maddin: Zrobiłeś to my_string + "".split()? Jeśli tak, potrzebujesz parens, ponieważ +ma niższy priorytet niż .. A więc tak:(my_string + "").split()
67

może

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

zakładając, że chcesz mieć aktualny adres URL

chepe263
źródło
12

Uruchom to

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

chcesz document.location.toString()lubdocument.location.href

dstarh
źródło
Dziękuję Ci. Nie zdawałem sobie sprawy, że przekonwertowałem mój var z ciągu znaków na obiekt. Twoje rozwiązanie dało mi pomysł, aby sprawdzić mój kod.
sg552
7

document.location nie jest ciągiem.

Prawdopodobnie chcesz użyć document.location.hreflub document.location.pathnamezamiast tego.

Denys Séguret
źródło
lol. 4 odpowiedzi (przynajmniej) w tym samym czasie. Nie powinienem patrzeć na najnowsze pytania dotyczące SO :)
Denys Séguret
0

W klauzuli if użyj (). Na przykład:

stringtorray = "xxxx,yyyyy,zzzzz";
if (xxx && (stringtoarray.split(',') + "")) { ...
Jonatas AstroPt
źródło