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


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.


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


12

Uruchom to

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

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


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.


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(',') + "")) { ...
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.