O que está causando o erro `string.split não é uma função`?


110

Por que estou recebendo ...

TypeError não capturado: string.split não é uma função

... quando eu corro ...

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


2
document.locationé um objeto. Experimente:var string=document.location.href
Teemu

Respostas:


212

Mude isso...

var string = document.location;

para isso...

var string = document.location + '';

Isso ocorre porque document.locationé um objeto Location . O padrão .toString()retorna o local em formato de string, então a concatenação irá acionar isso.


Você também pode usar document.URLpara obter uma string.


57
Não seria mais limpo chamar em toString()vez de concatenação hacky?
kapa

2
@ bažmegakapa: Sim, é uma questão de preferência. Este + ''é um truque bastante comum para coerção de strings, mas algumas pessoas preferem o toString()método. Eu não consideraria isso mais hacky do que usar o unário +para conversão de número.

3
Isso é tão feio. Existe parseInt()e parseFloat(). Existe também Number(). O +é mais curto, é claro, mas menos legível para alguém não acostumado a códigos hacky ou menos experiente.
kapa de

o + ''método não muda nada para mim no navegador Chrome, mas muda toString().
Martin Schneider

@ MA-Maddin: Você fez my_string + "".split()? Nesse caso, você precisa de parênteses, pois +tem uma precedência menor que .. Assim:(my_string + "").split()

66

talvez

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

presumindo que você deseja o url atual


12

Rode isto

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

você quer document.location.toString()oudocument.location.href


Obrigado. Não percebi que converti meu var de string para objeto. Sua solução me deu uma ideia para verificar meu código.
sg552

7

document.location não é uma string.

Você provavelmente está querendo usar document.location.hrefou em document.location.pathnamevez disso.


ri muito. 4 respostas (pelo menos) ao mesmo tempo. Eu não deveria olhar para as perguntas mais recentes no SO :)
Denys Séguret

0

Na cláusula if, use (). Por exemplo:

stringtorray = "xxxx,yyyyy,zzzzz";
if (xxx && (stringtoarray.split(',') + "")) { ...
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.