Quelle est la cause de l'erreur `string.split is not a function`?


110

Pourquoi est-ce que je reçois ...

Uncaught TypeError: string.split n'est pas une fonction

... quand je cours ...

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


2
document.locationest un objet. Essayez:var string=document.location.href
Teemu

Réponses:


213

Change ça...

var string = document.location;

pour ça...

var string = document.location + '';

C'est parce qu'il document.locations'agit d'un objet Location . La valeur par défaut .toString()renvoie l'emplacement sous forme de chaîne, donc la concaténation le déclenchera.


Vous pouvez également utiliser document.URLpour obtenir une chaîne.


57
Ne serait-il pas plus propre d'appeler toString()au lieu d'une concaténation hacky?
kapa

2
@ bažmegakapa: Ouais, c'est une question de préférence. Le + ''est une astuce assez courante pour la coercition de chaînes, mais certaines personnes préfèrent la toString()méthode. Je ne le considérerais pas plus piraté que d'utiliser l'unaire +pour la conversion de nombres.

3
C'est tout aussi moche. Il y a parseInt()et parseFloat(). Il y a aussi Number(). Le +est plus court bien sûr, mais moins lisible pour quelqu'un qui n'a pas l'habitude de pirater du code ou qui est moins expérimenté.
kapa

la + ''méthode ne change rien pour moi dans le navigateur Chrome, mais le toString()fait.
Martin Schneider

@ MA-Maddin: Avez-vous fait my_string + "".split()? Si tel est le cas, vous avez besoin de parenthèses car +a une priorité inférieure à .. Donc, comme ça:(my_string + "").split()

67

peut être

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

en supposant que vous vouliez l'URL actuelle


12

lance ça

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

tu veux document.location.toString()oudocument.location.href


Je vous remercie. Je n'avais pas réalisé que j'avais converti ma variable de chaîne en objet. Votre solution m'a donné une idée pour vérifier mon code.
sg552

7

document.location n'est pas une chaîne.

Vous souhaitez probablement utiliser document.location.hrefou à la document.location.pathnameplace.


lol. 4 réponses (au moins) en même temps. Je ne devrais pas regarder les dernières questions sur SO :)
Denys Séguret

0

En clausule si, utilisez (). Par exemple:

stringtorray = "xxxx,yyyyy,zzzzz";
if (xxx && (stringtoarray.split(',') + "")) { ...
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.