2012-08-04 53 views
8

संभव डुप्लिकेट:
What is “undefined x 1” in JavaScript?[अपरिभाषित] और [,] के बीच क्या अंतर है?

क्रोम 21 में, कंसोल आउटपुट से [,]

[अपरिभाषित एक्स 1]

और भोजन खिलाने [undefined] आउटपुट

[अपरिभाषित]

[undefined] और [undefined x 1] के बीच क्या अंतर है?

[undefined x 1] नोटेशन क्या है?

+4

मेरा मानना ​​है कि आप इस [कड़ी] पढ़ने के लिए (http://stackoverflow.com/questions/10683773/what-is-undefined-x-1-in-javascript) –

+0

'[]' हो जाता है की जरूरत है मुझे '[]' ... – pimvdb

+2

कंसोल आउटपुट डेटा नहीं है, और यह * (जरूरी नहीं) * जावास्क्रिप्ट नोटेशन या सिंटैक्स नहीं है। यह डेटा का एक दृश्य प्रस्तुतिकरण है क्योंकि कंसोल डेवलपर्स ने फैसला किया कि इसे देखना चाहिए। कभी-कभी यह सहायक होता है, कभी-कभी यह भ्रमित या भ्रामक हो सकता है। –

उत्तर

11

[,]sparse array है। इसकी लंबाई 1 है, लेकिन कोई मान नहीं (0 in [,] === false)। इसे new Array(1) के रूप में भी लिखा जा सकता है।

[undefined]1 की लंबाई undefined मूल्य 0 पर मूल्य के साथ है।

संपत्ति का उपयोग करते समय "0", दोनों undefined लौटाएंगे - पहला क्योंकि उस संपत्ति को परिभाषित नहीं किया गया है, दूसरा क्योंकि मान "अपरिभाषित" है। हालांकि, सरणी अलग हैं, और उनके output in the console भी हैं।

-1

ऐसा लगता है कि यह बार-बार 'अपरिभाषित' मान प्रदर्शित करने के लिए एक शॉर्टेंड तरीका है। उदाहरण के लिए:

> [,,,] 
    [ undefined x 3 ] 

लेकिन [] बिल्कुल [undefined] के रूप में ही नहीं है। मैं दोबारा जांच करूंगा कि अगर मैं तुम थे।

+0

कृपया मेरे प्रश्न को दोबारा पढ़ें। मैं '[,]', नहीं '[] 'के बारे में पूछ रहा हूं। – Randomblue

+0

pimvdb के संपादन का स्पष्टीकरण: http://es5.github.com/#x11.1.4, "यदि कोई तत्व किसी सरणी के अंत में elided है, तो वह तत्व ऐरे की लंबाई में योगदान नहीं देता है।" –

+0

@Randomblue अच्छी तरह से हाँ, क्योंकि आपने इसे संपादित किया है ..: - \ – nickf

0

Thats अजीब [] क्रोम 21.

पर आउटपुट बस [] फिर से मेरे लिए वैसे भी [a, b, c, ...] जावास्क्रिप्ट की सरणी अंकन ताकि आप मूल रूप से कोई मूल्यों के साथ एक सरणी को परिभाषित कर रहे है।

हालांकि अंत में , सरणी उत्पादन को आसान बनाने के लिए स्वीकार्य है। तो क्रोम आपको क्या बता रहा है कि सरणी में एक अनिर्धारित मूल्य है। उदाहरण के लिए कोड देखें।

[,,] 
> [undefined x2] 
[1,2,] 
> [1, 2] 
[1,2,,] 
> [1, 2, undefined × 1] 
[1,2,,,] 
> [1, 2, undefined × 2] 
[1,2,,3,4,,,6] 
> [1, 2, undefined × 1, 3, 4, undefined × 2, 6] 
+1

मूल्यों को अनिर्धारित किया गया है कि वे मौजूद नहीं हैं; वे 'अपरिभाषित' पर सेट नहीं हैं। और जावास्क्रिप्ट ऐसे सरणी को पूरी तरह ठीक से संभाल सकता है। – pimvdb

+0

अपरिभाषित की परिभाषा कौन सा है। वास्तव में समस्या क्या है? – dualed

+0

समस्या यह शब्द है जो बहुत सटीक नहीं है। अगर आपको कोई फर्क नहीं पड़ता तो मैंने संपादित किया है। – pimvdb

5

[,] 1 की लंबाई और कोई सूचकांक के साथ एक सरणी पैदा करता है।

[undefined] सूचकांक 0 पर undefined मान के साथ 1 की लंबाई के साथ एक सरणी बनाता है।

var a = []; 

a[8] = void 0; //set the 8th index to undefined, this will make the array's length to be 9 as specified. The array is sparse 
console.log(a) //Logs undefined × 8, undefined, which means there are 8 missing indices and then a value `undefined` 

आप एक विरल सरणी पर .forEach उपयोग करने के लिए थे, तो यह सूचकांक मौजूद नहीं है कि छोड़ देता है:

Chrome की undefined × x विरल सरणियों अनुक्रमिक सूचकांक की जरूरत नहीं है कि के लिए है।

a.forEach(function() { 
    console.log(true); //Only logs one true even though the array's length is 9 
}); 

के रूप में कहां आप एक सामान्य .length आधारित पाश करते हैं:

for (var i = 0; i < a.length; ++i) { 
    console.log(true); //will of course log 9 times because it's only .length based 
} 

वहाँ एक पकड़ लिया है अगर आप उम्मीद .forEach गैर मानक कार्यान्वयन के रूप में एक ही तरीके से व्यवहार करने।

new Array(50).forEach(function() { 
    //Not called, the array doesn't have any indices 
}); 

$.each(new Array(50), function() { 
    //Typical custom implementation calls this 50 times 
}); 
संबंधित मुद्दे