क्या कोई निम्नलिखित को समझा सकता है?इंस्टेंस ऑफ असंगतता
[] instanceof Array; // true
'' instanceof String; // false
क्या कोई निम्नलिखित को समझा सकता है?इंस्टेंस ऑफ असंगतता
[] instanceof Array; // true
'' instanceof String; // false
नोट निम्नलिखित:
"" instanceof String; // => false
new String("") instanceof String; // => true
instanceof
एक वस्तु की आवश्यकता है, लेकिन ""
एक स्ट्रिंग शाब्दिक, और नहीं स्ट्रिंग ऑब्जेक्ट है। नोट निम्नलिखित प्रकार typeof
फ़ंक्शन का उपयोग:
typeof "" // => "string"
typeof new String("") // => "object"
typeof [] // => "object"
typeof new Array() // => "object"
'शाब्दिक स्ट्रिंग' और 'स्ट्रिंग' ऑब्जेक्ट के बीच क्या अंतर है और यह (स्पष्ट रूप से) क्यों महत्वपूर्ण है? जहां तक मुझे पता है कि उन्हें एक दूसरे के लिए इस्तेमाल किया जा सकता है लेकिन नतीजा यह है कि आप 'exampleof' का उपयोग नहीं कर सकते हैं यह जांचने के लिए कि क्या कोई' स्ट्रिंग ' – Halcyon
है, लेकिन '[]' एक सरणी अक्षर जैसा नहीं है' '' एक स्ट्रिंग अक्षर है? – FishBasketGordo
@ फिशबास्केट गॉर्डो सरणी में सभी प्रकार के प्राइमेटिव्स और ऑब्जेक्ट्स हो सकते हैं। –
क्योंकि ''
आदिम, एक वस्तु नहीं है यह।
जावास्क्रिप्ट में कुछ प्राइमेटिव्स में ऑब्जेक्ट रैपर हो सकता है। ये के साथ निर्मित कन्स्ट्रक्टर का उपयोग करके रैपर के इंस्टेंस बनाते समय बनाए जाते हैं।
new
आम तौर पर आवश्यक है क्योंकि यदि आप new
को बहिष्कृत करते हैं तो अक्सर फ़ंक्शन एक आदिम पर सहभागिता करेगा।
typeof new String(''); // "object"
typeof String(''); // "string"
typeof ''; // "string"
पुरातन है कि वस्तु रैपर string
, number
और boolean
हैं।
प्राइमेटिव्स जो null
और undefined
नहीं हैं।
तो '[]' के आदिम (यानी गैर-रैपर ऑब्जेक्ट) क्या है? – Randomblue
रैंडोम्ब्लू: कोई नहीं है। एक ऐरे हमेशा एक वस्तु है। –
@Randomblue मौजूद नहीं है। एक आदिम क्यों होगा? – Raynos
''
कुछ भी नहीं है; यह एक आदिम प्रकार है, और यह 5.5
या true
जैसा ही काम करता है। स्ट्रिंग आदिम और स्ट्रिंग ऑब्जेक्ट के बीच एक अंतर है। देखें:
new String('') instanceof String; // true
कुछ भी new String()
, new Number()
या new Boolean()
के साथ बनाया आदिम प्रकार के चारों ओर एक वस्तु आवरण है, और वे एक ही नहीं कर रहे हैं।
आदि तार के लिए जाँच करने के लिए, के बजाय typeof
का उपयोग करें:
typeof '' === 'string'; // true
दोनों के लिए जाँच करने के लिए, इस का उपयोग करें:
Object.prototype.toString.call('') === '[object String]'; // true
Object.prototype.toString.call(new String('')) === '[object String]'; // true
रहे हैं कारणों की एक जोड़ी के लिए Object.prototype.toString.call
उपयोग करने के लिए सरणी, स्ट्रिंग्स, संख्या और बूलियन के लिए सामान्य उपयोग कोड। वे हैं:
valueOf()
के साथ) और इसलिए यदि आपको लाइब्रेरी कोड लिखना है तो आपको उन्हें स्वीकार करना चाहिए।instanceof Array
false
का उपयोग करेगा। Object.prototype.toString.call
विधि सभी उद्देश्यों के लिए काम करता है।यह jQuery और अन्य बड़े, लोकप्रिय पुस्तकालयों में यही है।
मैंने कुछ खुदाई की है और मुझे लगता है कि इसे string interning के साथ करना है जो एक कंपाइलर अनुकूलन है।
ठीक है, कुछ गॉथस के लिए तैयार है? : डी
"abc" == "abc"; // true
"abc" === "abc"; // true
मुझे लगता है इस वजह से "स्ट्रिंग होना शामिल" जो संयोग से भी ('तार' सही प्राप्त करने के लिए Yay) भावना का एक बहुत, धारणात्मक बनाता का सच है। अगर आप को लगता है एक String
एक वस्तु है और एक वस्तु केवल खुद के बराबर और समान नहीं समान आंतरिक स्थिति के साथ आपत्ति है
new String("abc") == new String("abc"); // false
new String("abc") === new String("abc"); // false
यह समझ में आता है। जावा में पसंद है (या यह वैसे भी कैसे किया जाता है)।
और अब किकर के लिए:
(new String("abc")).substr(0,3) === (new String("abc")).substr(0,3); // true!
तो जाहिरा तौर पर जावास्क्रिप्ट दुभाषिया हमेशा स्ट्रिंग String
वस्तु के उपयोग पर होना शामिल करेगी।
तब मुझे पूछना चाहिए कि String
ऑब्जेक्ट का उपयोग क्या है? जाहिर है यह अपने दोस्तों के साथ अच्छा नहीं खेलता है।
पहला, 'एबीसी "===" एबीसी "' स्ट्रिंग इंटर्निंग की वजह से नहीं है। सख्त समानता काम करता है जैसा कि आप प्राचीन प्रकार के लिए उम्मीद करेंगे। '===' ऑब्जेक्ट्स के लिए केवल "संदर्भ-बराबर" है। – Ryan
स्ट्रिंग 'टाइप' केवल आपके प्रोटोटाइप को विस्तारित करने और आपको 'ऑब्जेक्ट्स' जैसी स्ट्रिंग बनाने की अनुमति देने के लिए है। वह ऑब्जेक्ट्स (सी में पॉइंटर्स के समान) केवल '===' होगा यदि वे 'वही पॉइंटर' हैं – Adaptabi
इसके अलावा 'टाइपोफ़ "" '' '" स्ट्रिंग "' और' टाइपऑफ [] '' "ऑब्जेक्ट" है (आप 'सरणी "की उम्मीद करेंगे लेकिन ठीक है, मैं इसके साथ रह सकता हूं) – Halcyon
अनुमान लगाना, क्या 'एक आदिम हो, लेकिन [] एक वस्तु? –
+1 दिलचस्प, क्योंकि '" ".constructor === स्ट्रिंग'। – pimvdb