¿Qué está causando el error `string.split is not a function`?


110

¿Por qué me estoy poniendo ...

TypeError no detectado: string.split no es una función

... cuando corro ...

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


2
document.locationes un objeto. Prueba:var string=document.location.href
Teemu

Respuestas:


212

Cambia esto...

var string = document.location;

a esto...

var string = document.location + '';

Esto se debe a que document.locationes un objeto de ubicación . El valor predeterminado .toString()devuelve la ubicación en forma de cadena, por lo que la concatenación lo activará.


También puedes usar document.URLpara obtener una cadena.


57
¿No sería más limpio llamar en toString()lugar de la concatenación hacky?
kapa

2
@ bažmegakapa: Sí, es una cuestión de preferencia. El + ''es un truco bastante común para la coacción cadena, pero algunas personas prefieren el toString()método. No lo consideraría más peligroso que usar el unario +para la conversión de números.

3
Eso es tan feo. Hay parseInt()y parseFloat(). También hay Number(). El +es más corta, por supuesto, pero menos legible para alguien no acostumbrado a hacky código o con menos experiencia.
kapa

el + ''método no cambia nada para mí en el navegador Chrome, pero lo toString()hace.
Martin Schneider

@ MA-Maddin: ¿Lo hiciste my_string + "".split()? Si es así, necesita parens ya que +tiene una precedencia menor que .. Así que así:(my_string + "").split()

66

tal vez

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

asumiendo que quieres la URL actual


12

ejecuta esto

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

tu quieres document.location.toString()odocument.location.href


Gracias. No me di cuenta de que convertí mi var de cadena en objeto. Su solución me dio una idea para revisar mi código.
sg552

7

document.location no es una cuerda.

Probablemente quieras usar document.location.hrefo en su document.location.pathnamelugar.


lol. 4 respuestas (al menos) al mismo tiempo. No debería mirar las preguntas más recientes sobre SO :)
Denys Séguret

0

En clausula si, usar (). Por ejemplo:

stringtorray = "xxxx,yyyyy,zzzzz";
if (xxx && (stringtoarray.split(',') + "")) { ...
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.