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


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.


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


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


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.


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(',') + "")) { ...
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.