2010-06-16 28 views
16

अंतर को दर्शाने के लिए एक बहुत ही सरल कोड।फ़ायरबग के console.log() और console.debug() के बीच क्या अंतर है?

var x = [0, 3, 1, 2]; 
console.debug('debug', x); 
console.log('log', x); 
// above display the same result 
x.splice(1, 2); 
// below display kind of a different result 
console.debug('debug', x); 
console.log('log', x); 

alt text http://sixbytesunder.com/stuff/firebug_console.png

जावास्क्रिप्ट मूल्य splice() विधि लागू करने से पहले की तुलना में थोड़ा अलग बिल्कुल वैसा ही है, लेकिन console.log() यह प्रदर्शित करता है। इस वजह से मैंने कुछ घंटों खो दिए क्योंकि मैंने सोचा था कि स्प्लिस मजाकिया काम कर रहा है, मेरी सरणी बहुआयामी या कुछ बना रहा है।

मैं सिर्फ यह जानना चाहता हूं कि यह ऐसा क्यों काम करता है। क्या कोई जानता है? :)

+0

जैसा कि टिम नीचे लिखता है: "अधिक संभावना है कि 'console.log' और' console.debug' डिज़ाइन द्वारा अलग-अलग व्यवहार करते हैं। यदि आप उत्सुक हैं तो स्रोत उपलब्ध है।"आप [फायरबग के चर्चा समूह] (http://groups.google.com/group/firebug) पर एक प्रश्न भी पूछ सकते हैं या [एक बग रिपोर्ट फाइल करें] (http://code.google.com/p/fbug/ मुद्दों/सूची)। –

उत्तर

9

आप प्रलेखन को देखें, तो it says:

सांत्वना चार अलग अलग प्रकार संदेशों, जो वर्णन नीचे [...]

भी देखें और अधिक के लिए कंसोल एपीआई जानता है विभिन्न आदेशों के बारे में जानकारी।

console.log पर उस पृष्ठ shows पर एक नजर:

वस्तुओं लॉग इन कर रहे हैं, वे स्थिर के रूप में नहीं पाठ लिखा है, लेकिन इंटरैक्टिव हाइपरलिंक के रूप में हो सकता है कि हो जाएगा वस्तु निरीक्षण करने के लिए क्लिक किया फ़ायरबग का एचटीएमएल, सीएसएस, स्क्रिप्ट, या डोम टैब में।

तो, मुझे लगता है कि splice से पहले, सरणी आंतरिक रूप से अभी भी एक Array (मुझे पता है, यह वस्तु की तरह है), लेकिन ऑपरेशन के बाद, आप एक सामान्य वस्तु मिलता है, कम से कम आंतरिक रूप से है । मुझे पता है कि यह एक कमजोर स्पष्टीकरण है, लेकिन कंसोल में फायरबग का अजीब व्यवहार है।

Btw, ECMAScript specification कुछ भी नहीं उपयोगी कहते हैं, लेकिन हम खंड में पढ़ सकते हैं के बारे में Array.prototype.splice (§ 15.4.4.12):

splice समारोह जानबूझकर सामान्य है; इसकी आवश्यकता नहीं है कि इसकी this मान एक ऐरे ऑब्जेक्ट हो। इसलिए इसे विधि के रूप में उपयोग के लिए अन्य प्रकार की वस्तुओं में स्थानांतरित किया जा सकता है। चाहे splice फ़ंक्शन होस्ट ऑब्जेक्ट को सफलतापूर्वक लागू किया जा सकता है ऑब्जेक्ट कार्यान्वयन-निर्भर है।

+0

चाहे 'ऐरे' पर लागू हों या नहीं, 'Array.prototype.splice' हमेशा' ऐरे 'देता है। वह कल्पना में है। –

+0

@ टिम: हाँ, मुझे पता है, मैंने फ़ायरफ़ॉक्स * आंतरिक * प्रतिनिधित्व के बारे में बात की, जो कि spec निर्धारित से अलग हो सकता है। –

+2

फायरबग सामान्य जावास्क्रिप्ट और एक्सयूएल में लिखा गया है। जबकि उस वातावरण में चल रहे जावास्क्रिप्ट में ऑब्जेक्ट्स और एक्सटेंशन तक पहुंच है, जो पेज में चल रही जावास्क्रिप्ट नहीं है, मैं कल्पना नहीं कर सकता कि यह spec से अलग हो जाएगा। अधिक संभावना है कि 'console.log' और' console.debug' डिज़ाइन द्वारा अलग-अलग व्यवहार करते हैं। यदि आप उत्सुक हैं तो स्रोत उपलब्ध है। –

1

Firebug 1.6a12 में मैं

debug [0, 3, 1, 2] blog.php (line 80) 
log [0, 3, 1, 2] 
debug [0, 2]  blog.php (line 85) 
log [0, 2] 

debug() लाइनों console.debug() लाइन के स्रोत लाइन के लिए लिंक शामिल मिलता है।

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