2009-07-06 12 views
13

RegExp /^\w+$/ मिलान undefined क्यों है?

उदाहरण कोड:

alert(/^\w+$/.test(undefined)); 

यह Firefox 3 में सच को प्रदर्शित करेगा (केवल ब्राउज़र मैं इस पर परीक्षण किया)।

उत्तर

33

जब undefined एक स्ट्रिंग (जो रेगेक्स करता है) पर डाला जाता है, तो यह "undefined" स्ट्रिंग का उत्पादन करता है, जिसे तब मिलान किया जाता है।

+2

समझ में आता है, हालांकि यह थोड़ा सा अनजान है। – cdmckay

+0

शायद थोड़ा सा ... लेकिन अपवादों या जावास्क्रिप्ट में ऐसा कुछ भी वास्तविक अवधारणा नहीं है, चुपचाप मरने से थोड़ा कर्कश व्यवहार बेहतर है। –

+0

वैसे त्रुटियां हैं (https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Error) ... – cdmckay

4
/(\w)(\w)(\w)(\w)(\w)/.exec(undefined); 

रिटर्न: ["undef", "u", "n", "d", "e", "f"]

यह स्ट्रिंग "undefined" के रूप में अपरिभाषित इलाज किया जाता है।

4

RegExp.prototype.exec (स्ट्रिंग) के लिए ECMAScript विशिष्टता अनुभाग 15.10.6.2 देखें। जिसे मैच विधि से बुलाया जाएगा। मैच मूल रूप से निष्पादित होता है जब इसका मूल्यांकन सही होता है।

यहाँ विनिर्देश से शब्द के लिए शब्द है: नियमित अभिव्यक्ति के खिलाफ तार का एक रेगुलर एक्सप्रेशन मिलान करता है और मैच के परिणाम से युक्त एक सरणी वस्तु देता है, या नल अगर स्ट्रिंग से मेल नहीं खाती स्ट्रिंग ToString (स्ट्रिंग) नियमित रूप से अभिव्यक्ति पैटर्न की घटना के लिए खोजा जाता है:

  1. एस को ToString (स्ट्रिंग) का मान होना चाहिए।
  2. लंबाई लंबाई की लंबाई एस
  3. अंतिम इंडेक्स अंतिम इंडेक्स संपत्ति का मूल्य बनने दें।
  4. मुझे ToInteger (lastIndex) का मान होने दें।
  5. यदि वैश्विक संपत्ति गलत है, तो मुझे = 0.
  6. यदि मैं < 0 या I> लंबाई तो अंतिम इंडेक्स 0 पर सेट करता हूं और शून्य वापस करता हूं।
  7. कॉल [[मैच]], इसे तर्क एस और मैं दे रहा हूं। अगर [[मैच]] विफलता लौटा, तो चरण 8 पर जाएं; अन्यथा इसके राज्य परिणाम होने दें और चरण 10 पर जाएं।
  8. मुझे i = i + 1 दें।
  9. चरण 6 पर जाएं।
  10. ई आर के अंत इंडेक्स मान दें।

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

कमांड लाइन में जेस्क्रिप्ट का उपयोग करके ब्राउजर के बाहर और उसी परिणाम प्राप्त करने के साथ-साथ इसका परीक्षण किया।

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