Що викликає помилку `string.split не є функцією`?


110

Чому я отримую ...

Uncaught TypeError: string.split не є функцією

... коли я біжу ...

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


2
document.locationє об’єктом. Спробуйте:var string=document.location.href
Teemu

Відповіді:


212

Змінити це ...

var string = document.location;

до цього...

var string = document.location + '';

Це тому, що document.locationє об’єктом Location . За замовчуванням .toString()повертає розташування у рядковій формі, тому зв'язок спровокує це.


Ви також можете використовувати document.URLрядок.


57
Чи не було б чистішим подзвонити toString()замість хакітської конкатенації?
капа

2
@ bažmegakapa: Так, це питання переваги. Це + ''досить поширений трюк для струнного примусу, але деякі люди віддають перевагу toString()методу. Я б не вважав це більш хитким, ніж використання унарного +для перетворення чисел.

3
Це так само негарно. Є parseInt()і parseFloat(). Є також Number(). Це +, звичайно, коротше, але менш читабельне для тих, хто не звик до хакі-коду чи менш досвідченого.
капа

+ ''метод нічого для мене не зміниться в браузері Chrome , але toString()робить.
Мартін Шнайдер

@ MA-Maddin: Ти робив my_string + "".split()? Якщо це так, вам потрібні паролі, оскільки вони +мають нижчий пріоритет ніж .. Так ось так:(my_string + "").split()

66

може бути

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 відповіді (принаймні) одночасно. Мені не варто дивитись на новітні питання щодо SO :)
Denys Séguret

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.