Was verursacht den Fehler "string.split ist keine Funktion"?

110

Warum bekomme ich ...

Nicht erfasster TypeError: string.split ist keine Funktion

... wenn ich renne ...

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

Eric
quelle
2
document.locationist ein Objekt. Versuchen Sie:var string=document.location.href
Teemu

Antworten:

212

Ändere das...

var string = document.location;

dazu ...

var string = document.location + '';

Dies liegt daran, dass document.locationes sich um ein Standortobjekt handelt . Die Standardeinstellung .toString()gibt den Speicherort in Zeichenfolgenform zurück, sodass die Verkettung dies auslöst.


Sie können auch document.URLeine Zeichenfolge abrufen.

Benutzer1106925
quelle
57
Wäre es nicht sauberer, toString()statt einer hackigen Verkettung anzurufen?
Kapa
2
@ bažmegakapa: Ja, das ist eine Frage der Präferenz. Das + ''ist ein ziemlich häufiger Trick für Zwang, aber einige Leute bevorzugen die toString()Methode. Ich würde es nicht als hackiger betrachten, als das Unäre +für die Zahlenkonvertierung zu verwenden .
3
Das ist genauso hässlich. Es gibt parseInt()und parseFloat(). Es gibt auch Number(). Das +ist natürlich kürzer, aber weniger lesbar für jemanden, der nicht an Hacky-Code gewöhnt ist oder weniger Erfahrung hat.
Kapa
Die + ''Methode ändert für mich in Chrome Browser nichts, toString()tut es aber .
Martin Schneider
@ MA-Maddin: Hast du getan my_string + "".split()? In diesem Fall benötigen Sie Parens, da +diese eine niedrigere Priorität haben als .. Also so:(my_string + "").split()
66

vielleicht

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

Angenommen, Sie möchten die aktuelle URL

chepe263
quelle
12

Führen Sie dies aus

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

du willst document.location.toString()oderdocument.location.href

dstarh
quelle
Danke dir. Ich habe nicht bemerkt, dass ich meine Variable von String zu Objekt konvertiert habe. Ihre Lösung brachte mich auf die Idee, meinen Code erneut zu überprüfen.
SG552
7

document.location ist keine Zeichenfolge.

Sie möchten wahrscheinlich document.location.hrefoder document.location.pathnamestattdessen verwenden.

Denys Séguret
quelle
lol. 4 Antworten (mindestens) gleichzeitig. Ich sollte mir nicht die neuesten Fragen zu SO ansehen :)
Denys Séguret
0

In Klausel wenn verwenden (). Beispielsweise:

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