Điều gì gây ra lỗi `string.split không phải là một hàm`?


110

Tại sao tôi nhận được ...

Uncaught TypeError: string.split không phải là một hàm

... khi tôi chạy ...

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


2
document.locationlà một đối tượng. Hãy thử:var string=document.location.href
Teemu

Câu trả lời:


212

Thay đổi điều này...

var string = document.location;

đến đây ...

var string = document.location + '';

Điều này là do document.locationlà một đối tượng Vị trí . Mặc định .toString()trả về vị trí ở dạng chuỗi, vì vậy việc nối sẽ kích hoạt điều đó.


Bạn cũng có thể sử dụng document.URLđể lấy một chuỗi.


57
Nó sẽ không rõ ràng hơn nếu gọi toString()thay vì nối hacky?
kapa

2
@ bažmegakapa: Vâng, đó là vấn đề sở thích. Đây + ''là một thủ thuật khá phổ biến để ép buộc chuỗi, nhưng một số người thích toString()phương pháp này hơn. Tôi sẽ không coi nó là hacky hơn việc sử dụng một ngôi +để chuyển đổi số.

3
Điều đó thật xấu xí. Có parseInt()parseFloat(). Ngoài ra còn có Number(). Tất nhiên +là ngắn hơn, nhưng ít dễ đọc hơn đối với những người không quen sử dụng mã hacky hoặc ít kinh nghiệm.
kapa

các + ''phương pháp không thay đổi bất cứ điều gì cho tôi trong Trình duyệt Chrome nhưng toString()không.
Martin Schneider

@ MA-Maddin: Bạn đã làm my_string + "".split()? Nếu vậy, bạn cần parens vì +có mức độ ưu tiên thấp hơn .. Vì vậy, như thế này:(my_string + "").split()

66

có lẽ

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

giả sử bạn muốn url hiện tại


12

chạy cái này

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

bạn muốn document.location.toString()hoặcdocument.location.href


Cảm ơn bạn. Tôi không nhận ra rằng tôi đã chuyển đổi var của mình từ chuỗi thành đối tượng. Giải pháp của bạn đã cho tôi một ý tưởng để kiểm tra lại mã của tôi.
sg552

7

document.location không phải là một chuỗi.

Bạn có thể muốn sử dụng document.location.hrefhoặc document.location.pathnamethay thế.


cười lớn. 4 câu trả lời (ít nhất) cùng một lúc. Tôi không nên nhìn vào những câu hỏi mới nhất trên SO :)
Denys SEGURET

0

Trong clausule if, use (). Ví dụ:

stringtorray = "xxxx,yyyyy,zzzzz";
if (xxx && (stringtoarray.split(',') + "")) { ...
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.