อะไรเป็นสาเหตุของข้อผิดพลาด "string.split ไม่ใช่ฟังก์ชัน"


110

ทำไมฉันถึงได้ ...

Uncaught TypeError: string.split ไม่ใช่ฟังก์ชัน

... เมื่อฉันวิ่ง ...

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


2
document.locationเป็นวัตถุ ลอง:var string=document.location.href
Teemu

คำตอบ:


219

เปลี่ยนสิ่งนี้ ...

var string = document.location;

สำหรับสิ่งนี้...

var string = document.location + '';

นี้เป็นเพราะdocument.locationเป็นวัตถุสถานที่ตั้ง ค่าเริ่มต้น.toString()จะส่งคืนตำแหน่งในรูปแบบสตริงดังนั้นการต่อข้อมูลจะทำให้เกิดสิ่งนั้น


คุณยังสามารถใช้document.URLเพื่อรับสตริง


57
จะไม่เป็นการดีกว่าที่จะเรียกtoString()แทนการเชื่อมต่อแบบแฮ็ก?
kapa

2
@ bažmegakapa: ใช่นั่นเป็นเรื่องของความชอบ นี่+ ''เป็นเคล็ดลับทั่วไปสำหรับการบีบบังคับสตริง แต่บางคนชอบtoString()วิธีนี้ ฉันจะไม่คิดว่ามันแฮ็คมากไปกว่าการใช้ยูนารี+สำหรับการแปลงตัวเลข

3
นั่นก็น่าเกลียดพอ ๆ มีparseInt()และparseFloat(). Number()นอกจากนี้ยังมี +สั้นแน่นอน แต่สามารถอ่านได้น้อยสำหรับคนที่ไม่ได้ใช้รหัส hacky หรือมีประสบการณ์น้อย
kapa

+ ''วิธีการไม่ได้เปลี่ยนแปลงอะไรสำหรับฉันใน Chrome เบราว์เซอร์ แต่toString()ไม่
Martin Schneider

@ MA-Maddin: คุณทำmy_string + "".split()หรือไม่? ถ้าเป็นเช่นนั้นคุณจะต้อง parens ตั้งแต่มีความสำคัญต่ำกว่า+ .เป็นเช่นนี้:(my_string + "").split()

67

อาจจะ

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

สมมติว่าคุณต้องการ url ปัจจุบัน


13

เรียกใช้สิ่งนี้

// 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.