2009-11-03 17 views
6

में अपरिभाषित है जब आप चलाएँ:window.toString.call IE8

window.toString.call("") 

सब कुछ एफएफ/सीएच में ठीक लेकिन IE8 में आप एक स्क्रिप्ट त्रुटि मिलती है। थोड़ा और जांच कर यह पता चला कि window.toString.call IE8 में अपरिभाषित है?

window.toString instanceof Function; 
// false 

alert(window.toString); 
// function toString() { 
// [native code] 
// } 

कि और यह कैसे हल करने के लिए क्यों है:

आप भी इस एक चला सकता हूँ? और मैंने यह सोचना शुरू किया कि jQuery पहली जगह कैसे काम करता है?

+0

संयोग से, जब मैं फ़ायरफ़ॉक्स पर 'window.toString.call ("") 'करता हूं तो यह' शून्य 'देता है। इसके अलावा, 'Object.prototype.toString.call ("")' स्ट्रिंग '[ऑब्जेक्ट स्ट्रिंग]' देता है, जो अपेक्षा के अनुसार काफी अधिक है। यह समझाने में मदद कर सकता है कि आप वास्तव में क्या करने की कोशिश कर रहे हैं। – NickFitz

उत्तर

14

window एक होस्ट ऑब्जेक्ट है, और ECMAScript Language Specification (3rd edition) को होस्ट 0 ऑब्जेक्ट्स को देशी Object ऑब्जेक्ट से प्राप्त करने की आवश्यकता नहीं है। आईई (और शायद कुछ अन्य ब्राउज़रों में) होस्ट ऑब्जेक्ट्स नहीं हैं, इसलिए वे मूलभूत विधियों या गुणों का समर्थन नहीं करते हैं (हालांकि उनके पास मूल विधियों या गुणों के समान नामों के साथ विधियों या गुण हो सकते हैं जो पहुंच योग्य हैं स्क्रिप्ट)।

यदि आप चाहते हैं कि भाषा कार्यान्वयन के डिफ़ॉल्ट मूल toString विधि को पकड़ना है तो आपको Object.prototype.toString.call("") का उपयोग करना चाहिए।

+0

ग्रेट उत्तर @ निकफिट्स, धन्यवाद ... –

1

NickFitz सही है, तो मेजबान उद्देश्य यह है कि आप पा रहे हैं पर toString विधि विशुद्ध रूप से होता है ताकि आप किया था अगर

चेतावनी (विंडो);

आप पाठ मिलेगा [वस्तु]

सभी कि जावास्क्रिप्ट विधि toString() अपने उदाहरण प्राप्त होगा में इस्तेमाल एक तार से एक स्ट्रिंग बनाने के लिए तो सही तरीका है कि तुम क्या कोशिश कर रहे हैं करने के लिए है,

var a =new String (""); 

या बस

var b = ""; 

या यदि आप वास्तव में मूर्ख होना चाहते हैं;

var b = "".toString(); 
+1

उत्तर की स्थिति के बाद से "उत्तर" या "नीचे" होने के रूप में अन्य उत्तरों का जिक्र करने से बचें चयनित सॉर्टिंग और उस समय वोट गणना पर निर्भर करता है। इसके बजाय उत्तर के परमालिंक प्रदान करने का प्रयास करें। मुझे लगता है कि आप एक पूर्ण यूआरएल के बजाय सिर्फ एंकर का उपयोग भी कर सकते हैं। उदाहरण के लिए, [1]: # 1669142 –

+0

कूल, ऐसा किया। –