2012-04-13 15 views
59

मैं क्यों मिल रही है ...त्रुटि का कारण क्या है 'string.split फ़ंक्शन नहीं है'?

Uncaught TypeError: string.split is not a function

... जब मैं चलाने ...

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

+2

'document.location' एक वस्तु है। आज़माएं: 'var string = document.location.href' – Teemu

उत्तर

125

बदलें इस ...

var string = document.location; 

इस के लिए ...

var string = document.location + ''; 

ऐसा इसलिए है क्योंकि document.location एक Location object है। डिफ़ॉल्ट .toString() स्ट्रिंग फ़ॉर्म में स्थान देता है, इसलिए concatenation इसे ट्रिगर करेगा।


आप स्ट्रिंग प्राप्त करने के लिए document.URL का भी उपयोग कर सकते हैं।

+22

क्या हैकी कंसटेनेशन के बजाय 'toString()' को कॉल करने के लिए क्लीनर नहीं होगा? – kapa

+1

@ bažmegakapa: हाँ, यह वरीयता का मामला है। '+' 'स्ट्रिंग जबरन के लिए एक बहुत ही आम चाल है, लेकिन कुछ लोग 'toString()' विधि पसंद करते हैं। मैं संख्या रूपांतरण के लिए यूनरी '+' का उपयोग करने से कहीं अधिक हैकी नहीं मानूंगा। –

+2

यह उतना ही बदसूरत है। 'ParseInt()' और 'parseFloat()' है। 'संख्या()' भी है। '+' निश्चित रूप से छोटा है, लेकिन किसी के लिए कम पठनीय हैक कोड या कम अनुभवी नहीं है। – kapa

39

शायद

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

मानते हुए कि आपके वर्तमान यूआरएल

2

document.location चाहते एक स्ट्रिंग नहीं है।

शायद आप document.location.href या document.location.pathname का उपयोग करना चाहते हैं।

+0

लॉल। एक ही समय में 4 उत्तरों (कम से कम)। मुझे SO पर नवीनतम प्रश्नों को नहीं देखना चाहिए :) –

6

रन इस

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

आप चाहते हैं document.location.toString() या document.location.href

+0

धन्यवाद। मुझे एहसास नहीं हुआ कि मैंने अपनी var को स्ट्रिंग से ऑब्जेक्ट में परिवर्तित कर दिया है। आपके समाधान ने मुझे अपना कोड वापस जांचने का विचार दिया। – sg552

संबंधित मुद्दे