Что вызывает ошибку `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для получения строки.


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


12

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

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

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


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

7

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

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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.