2010-04-20 14 views
24

के लिए परीक्षण कैसे करूं मैं यह देखने के लिए परीक्षण कर रहा हूं कि जावास्क्रिप्ट चर अपरिभाषित है या नहीं।जावास्क्रिप्ट सरणी मान अपरिभाषित है ... मैं

आप देखेंगे कि मैं पूर्ववर्ती [preId] के मूल्य को 'अपरिभाषित' होने की उम्मीद नहीं कर रहा हूं अगर मुझे पहली बार "अविश्वसनीय" कहने की चेतावनी नहीं मिलती है। लेकिन मैं अक्सर करता हूं, इसलिए मुझे लगता है कि मेरा कथन

predQuery[preId]=='undefined') 

अपरिभाषित तत्वों को ठीक से मेल नहीं कर रहा है।

if((predQuery.length < preId) || (predQuery[preId]=="") || (predQuery[preId]=='undefined')){ 
    alert("its unbelievable"); 
    alert(predQuery[preId]); 
    queryPreds[variables] = preId; 
    queryObjs[variables] = objId; 
    predQuery[preId] = variables; 
} 
else { 
    alert(predQuery[preId]); 
    var predIndex = predQuery[preId]; 
    queryPreds[predIndex] = preId; 
    queryObjs[predIndex] = objId; 
} 

यदि आवश्यक हो तो मैं और कोड जोड़ सकता हूं। के लिए

if (predQuery[preId] === undefined) 

+0

मैं में मेरी खंड के रूप में (typeof (predQuery [preId]) == 'अनिर्धारित') का इस्तेमाल किया है काम करता है मेरी अगर बयान। – Ankur

+0

यदि ऐसा है तो यह प्रदर्शित नहीं हो रहा है। – deceze

+0

@deceze ... मेरा मतलब था कि, मैंने अपना कोड बदल दिया है। मैंने सवाल संपादित नहीं किया है, क्योंकि इससे भविष्य में लोगों को एक ही समस्या के साथ मदद नहीं मिलेगी। – Ankur

उत्तर

55

array[index] == 'undefined' तुलना स्ट्रिंग के लिए "अनिर्धारित" सरणी सूचकांक के मूल्य
आप शायद typeof array[index] == 'undefined' की तलाश कर रहे हैं, जो प्रकार से तुलना करता है।

+3

+1 उत्परिवर्तनीय 'अपरिभाषित' –

+2

के बजाय अपरिवर्तनीय प्रकार के विरुद्ध तुलना करना यह अकेला '[अपरिभाषित] [0] 'और' [] [0] 'के बीच अंतर नहीं कर सकता है। यदि कोई मौका है कि आपकी सरणी खाली हो सकती है, तो आप शायद इस परिदृश्य का सामना करेंगे। – sighrobot

1

चेक ऑपरेटर के लिए सख्त बराबर का उपयोग करें। देखें comparison operators

+1

लगभग - लेकिन सबसे अच्छा अभ्यास है जैसे कि धोखा कहता है, टाइपफॉफ़ की तुलना करें क्योंकि इसे अपरिभाषित के रूप में फिर से परिभाषित नहीं किया जा सकता है। –

+1

मूर्खतापूर्ण नहीं है, क्योंकि अपरिभाषित परिभाषित किया जा सकता है। बस 'window.undefined = "lolz" के साथ; ' – Warty

+5

जावास्क्रिप्ट लिखना असंभव है जो हर बिल्टिन को फिर से परिभाषित करने के खिलाफ गार्ड करता है (लगभग कुछ भी हो सकता है)। मैं Redefinitions से बचने के लिए कोड कम पढ़ने योग्य बनाने की वकालत नहीं करता हूं। क्रॉस-विंडो स्क्रिप्टिंग में डेटाटाइप का पता लगाने के लिए 'टाइपोफ' का दूसरा उपयोग होता है, लेकिन यह वैसे भी 'अपरिभाषित' पर लागू नहीं होता है। – bobince

1

कोशिश: typeof(predQuery[preId])=='undefined'
या अधिक सामान्यतः: typeof(yourArray[yourIndex])=='undefined'
आप अपरिभाषित है, जो झूठे रिटर्न के लिए "अनिर्धारित" तुलना कर रहे हैं =)

10

आप इसे सरणी सूचकांक की जाँच कर रहे एक स्ट्रिंग "undefined" होता है, या तो आप चाहिए typeof ऑपरेटर का उपयोग करें:

typeof predQuery[preId] == 'undefined' 

या undefined वैश्विक संपत्ति का उपयोग करें:

0,123,
predQuery[preId] === undefined 

पहला तरीका, सुरक्षित है क्योंकि undefined वैश्विक संपत्ति लिखने योग्य है, और यह किसी भी अन्य मूल्य के लिए बदला जा सकता है।

4

वहाँ रोम के लिए अधिक (कई) तरीके हैं:

//=>considering predQuery[preId] is undefined: 
predQuery[preId] === undefined; //=> true 
undefined === predQuery[preId] //=> true 
predQuery[preId] || 'it\'s unbelievable!' //=> it's unbelievable 
var isdef = predQuery[preId] ? predQuery[preId] : null //=> isdef = null 

चियर्स!

6
predQuery[preId]=='undefined' 

आप स्ट्रिंग'undefined' के खिलाफ परीक्षण कर रहे हैं; आपने इस परीक्षण को typeof परीक्षण से भ्रमित कर दिया है जो एक स्ट्रिंग लौटाएगा। आप शायद विशेष मूल्य undefined के खिलाफ परीक्षण करने के लिए मतलब है:

predQuery[preId]===undefined 

नोट सख्त-समानता ऑपरेटर आम तौर पर-अवांछित मैच null==undefined से बचने के लिए।

हालांकि दो तरीकों से एक undefined मूल्य प्राप्त कर सकते हैं: या तो preIdpredQuery का सदस्य नहीं है, या यह एक सदस्य है, लेकिन विशेष undefined मान पर सेट एक मूल्य है।अक्सर, आप केवल यह जांचना चाहते हैं कि यह मौजूद है या नहीं; उस मामले में in ऑपरेटर अधिक उपयुक्त है:

!(preId in predQuery) 
0

इस कोड को बहुत अच्छी तरह से

function isUndefined(array, index) { 
    return ((String(array[index]) == "undefined") ? "Yes" : "No"); 
} 
+1

आप === के बजाय == का उपयोग क्यों करते हैं? – leofontes

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