Что вызывает ошибку `string.split is not a function`?

110

Почему я получаю ...

Uncaught TypeError: string.split не является функцией

... когда я бегу ...

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

Эрик
источник
2
document.locationэто объект. Попробуйте:var string=document.location.href
Teemu

Ответы:

215

Измените это ...

var string = document.location;

к этому...

var string = document.location + '';

Это потому, что document.locationэто объект Location . По умолчанию .toString()местоположение возвращается в строковой форме, поэтому конкатенация вызовет это.


Вы также можете использовать document.URLдля получения строки.

user1106925
источник
57
Разве не было бы чище вызов toString()вместо хакерской конкатенации?
капа
2
@ bažmegakapa: Да, это вопрос предпочтений. Это + ''довольно распространенный прием для приведения строк, но некоторые люди предпочитают этот toString()метод. Я бы не считал это более хакерским, чем использование унарных +чисел для преобразования чисел.
3
Это так же уродливо. Есть parseInt()и parseFloat(). Также есть Number(). +Короче конечно, но менее читабельным для кого - то не используется для Hacky кода или менее опытных.
капа
этот + ''метод ничего не меняет в браузере Chrome, но меняет toString().
Мартин Шнайдер
@ МА-Маддин: Вы это сделали my_string + "".split()? В таком случае вам нужны парные скобки, поскольку +их приоритет ниже, чем у .. Вот так:(my_string + "").split()
67

может быть

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

предполагая, что вам нужен текущий URL

chepe263
источник
12

запустить это

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

ты хочешь document.location.toString()илиdocument.location.href

dstarh
источник
Спасибо. Я не понял, что преобразовал свой var из строки в объект. Ваше решение натолкнуло меня на мысль проверить мой код.
sg552
7

document.location не строка.

Вы, вероятно, захотите использовать document.location.hrefили document.location.pathnameвместо него.

Дени Сегюре
источник
ржунимагу. 4 ответа (как минимум) одновременно. Я не должен смотреть на самые
свежие
0

В clausule if используйте (). Например:

stringtorray = "xxxx,yyyyy,zzzzz";
if (xxx && (stringtoarray.split(',') + "")) { ...
Джонатас АстроПт
источник