Cosa sta causando l'errore `string.split non è una funzione`?


110

Perché sto ricevendo ...

Uncaught TypeError: string.split non è una funzione

... quando corro ...

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


2
document.locationè un oggetto. Prova:var string=document.location.href
Teemu

Risposte:


212

Cambia questo...

var string = document.location;

a questa...

var string = document.location + '';

Questo perché document.locationè un oggetto Location . L'impostazione predefinita .toString()restituisce la posizione in forma di stringa, quindi la concatenazione lo attiverà.


Puoi anche usare document.URLper ottenere una stringa.


57
Non sarebbe più pulito chiamare toString()invece di concatenazione hacky?
kapa

2
@ bažmegakapa: Sì, è una questione di preferenza. Il + ''è un trucco abbastanza comune per la coercizione stringa, ma alcune persone preferiscono il toString()metodo. Non lo considererei più hacky che usare l'unario +per la conversione dei numeri.

3
È altrettanto brutto. C'è parseInt()e parseFloat(). C'è anche Number(). Il +è più breve, naturalmente, ma meno leggibile per qualcuno non utilizzato per il codice hacky o meno esperti.
kapa

il + ''metodo non cambia nulla per me nel browser Chrome, ma lo toString()fa.
Martin Schneider,

@ MA-Maddin: l'hai fatto my_string + "".split()? In tal caso, hai bisogno di parentesi poiché +ha una precedenza inferiore a .. Quindi in questo modo:(my_string + "").split()

66

può essere

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

supponendo che tu voglia l'URL corrente


12

eseguire questo

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

vuoi document.location.toString()odocument.location.href


Grazie. Non mi sono reso conto di aver convertito la mia var da stringa a oggetto. La tua soluzione mi ha dato l'idea di ricontrollare il mio codice.
sg552

7

document.location non è una stringa.

Probabilmente vorrai usare document.location.hrefo document.location.pathnameinvece.


lol. 4 risposte (almeno) allo stesso tempo. Non dovrei guardare le ultime domande su SO :)
Denys Séguret

0

In clausola se, usa (). Per esempio:

stringtorray = "xxxx,yyyyy,zzzzz";
if (xxx && (stringtoarray.split(',') + "")) { ...
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.