2009-12-25 16 views

उत्तर

52

आप एक सरणी एक्स मौजूद है या नहीं की जाँच करें और यदि ऐसा नहीं होता है यह बनाना चाहते हैं, तो आप

x = (typeof x != 'undefined' && x instanceof Array) ? x : [] 
+2

यह ज्यादातर मामलों में काम करता है, लेकिन यदि आप किसी भिन्न वैश्विक 'ऐरे' कन्स्ट्रक्टर से तत्काल एक सरणी की जांच करने की योजना बनाते हैं तो यह आपको कवर नहीं करेगा - यह तब हो सकता है जब फ्रेम में स्क्रिप्टिंग हो। – James

+1

यह सच है। कोई उस मामले को कैसे संभालेगा? – Rich

+2

@Rich: मेरा जवाब यहां देखें: http://stackoverflow.com/questions/1961528/javascript-check-if-array-exist-if-not-create-it/1961653#1961653, यह बहु- तैयार डोम वातावरण। – CMS

11

आप अपरिभाषित और instanceof operator के लिए परीक्षण करने के लिए typeof operator उपयोग कर सकते हैं अगर यह सरणी का एक उदाहरण है परीक्षण करने के लिए: सदस्यों

if (typeof arr == "undefined" || !(arr instanceof Array)) { 
    var arr = []; 
} 
+0

मेरी आँख करने के लिए, यह करने के लिए आसान है रिच के संस्करण से पढ़ें। – DOK

+0

आप पहली जांच छोड़ सकते हैं, क्योंकि 'अपरिभाषित' ऐरे का उदाहरण नहीं है। – whitfin

+1

@zackehh यदि आप ऐसा करते हैं, तो यह एक त्रुटि फेंक सकता है अगर 'arr' अभी तक परिभाषित नहीं किया गया है – David

-4

आप एक ब्राउज़र पर्यावरण के बारे में बात कर रहे हैं तो सभी वैश्विक चर हैं खिड़की वस्तु का। तो जाँच करने के लिए:

if (window.somearray !== undefined) { 
    somearray = []; 
} 
+0

क्षमा करें, बुरा जवाब। बेहतर कोड के लिए गम्बो का जवाब देखें। – slebetman

43
var arr = arr || []; 
+10

लेकिन यह जांच नहीं करता है कि * arr * एक सरणी है या नहीं। – Gumbo

+4

आप सही हैं। यह सवाल से स्पष्ट नहीं था कि यह जांच कर रहा है कि यह अग्रिम में एक सरणी है, या सिर्फ यह देखने के लिए जांच कर रहा है कि चर पहले से परिभाषित है या नहीं। यह एक आम मुहावरे है, और अन्य लोगों की तुलना में कम और सरल है, इसलिए मैंने सोचा कि मैं इसे पोस्ट करूंगा और प्रश्नकर्ता को यह तय करने दें कि यह पर्याप्त है या नहीं। –

+2

यदि 'एआर' पहले से ही प्रासंगिक दायरे में परिभाषित किया गया है, तो क्यों' var ... 'से परेशान है? आप बस 'arr = arr || कर सकते हैं []; ' – James

6

कर सकते हैं आप अगर जाँच करना चाहते हैं

arr = Object.prototype.toString.call(arr) == "[object Array]" ? arr : []; 
: वस्तु पहले से ही एक सरणी, instanceof ऑपरेटर की well known issues से बचने के लिए जब बहु फंसाया डोम के वातावरण में काम कर रहा है, तो आप Object.prototype.toString विधि का उपयोग कर सकता है
+0

इस संदर्भ में 'arr' – kangax

+0

@ कंगैक्स घोषणा घोषित करने की आवश्यकता नहीं है। –

+0

@ जस्टिन जॉनसन कैसे? – kangax

9
let list = Array.isArray(x) ? x : []; 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray

या यदि वर एक्स एक सरणी हो सकता है और आप इसे एक है यह सुनिश्चित करना चाहते:

let list = [].concat(x); 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat

+0

दोनों मामलों में 'x को परिभाषित नहीं किया गया है' –

+1

'x' वेरिएबल है जो एक सरणी हो सकता है या नहीं। आप इसे परिभाषित करते हैं। यह सिर्फ उदाहरण कोड है ... – mynameistechno

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