2013-02-12 53 views
23

में टाइपफ़ोफ़ और उदाहरण के बीच अंतर मैं node.js के साथ काम कर रहा हूं, इसलिए यह V8 के लिए विशिष्ट हो सकता है।जावास्क्रिप्ट

मैं हमेशा typeof और instanceof के बीच मतभेद के साथ कुछ weirdness देखा है, लेकिन यहाँ एक है कि वास्तव में मुझे कीड़े है:

var foo = 'foo'; 
console.log(typeof foo); 

Output: "string" 

console.log(foo instanceof String); 

Output: false 

वहाँ पर क्या हो रहा है?

+3

जावास्क्रिप्ट में, मेरा मानना ​​है कि वहाँ के बीच एक विरोधाभास है आदिम स्ट्रिंग प्रकार और "ऑब्जेक्ट" 'स्ट्रिंग' प्रकार। अधिकांश समय वे अदला-बदले होते हैं, स्पष्ट रूप से 'exampleof' चेक के उद्देश्य के लिए नहीं। – millimoose

+3

इस पर एक नज़र डालें: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String#Distinction_between_string_primitives_and_String_objects – Waxen

+0

बाह, इसलिए पहले खोजा जाना चाहिए था: http: // stackoverflow .com/प्रश्न/11571 9 23/exampleof-string-not-behaving-as-expected-in-google-apps-script/11572009 # 11572009 – Eric

उत्तर

38

typeof एक ऐसा निर्माण है जो आपके द्वारा पारित किए जाने वाले मूल प्रकार का "रिटर्न" देता है।
instanceof यह देखने के लिए परीक्षण करें कि दाएं ऑपरेंड बाईं ओर की प्रोटोटाइप श्रृंखला में कहीं भी दिखाई देता है या नहीं।

यह ध्यान रखना महत्वपूर्ण है कि स्ट्रिंग अक्षर "abc" और स्ट्रिंग ऑब्जेक्ट new String("abc") के बीच एक बड़ा अंतर है। बाद के मामले में, typeof "स्ट्रिंग" के बजाय "ऑब्जेक्ट" वापस कर देगा।

7

शाब्दिक तार हैं और String वर्ग है। वे अलग हैं, लेकिन वे निर्बाध रूप से काम करते हैं, यानी आप अभी भी String विधियों को एक शाब्दिक स्ट्रिंग के लिए लागू कर सकते हैं, और यह कार्य करेगा जैसे शाब्दिक स्ट्रिंग String ऑब्जेक्ट इंस्टेंस था।

आप स्पष्ट रूप से एक String उदाहरण बनाते हैं, तो यह एक वस्तु है, और यह String वर्ग का एक उदाहरण है:

var s = new String("asdf"); 
console.log(typeof s); 
console.log(s instanceof String); 

आउटपुट:

object 
true 
+1

आपको ध्यान रखना चाहिए कि 'टाइपोफ़' आउटपुट वास्तव में 'ऑब्जेक्ट' '(लोअरकेस स्ट्रिंग) – rgthree

+0

होगा @rgthree: हाँ, आप सही हैं। मैंने आउटपुट को सही किया। – Guffa

+0

@rgthree इसे उत्तर में भी जोड़ा जाना चाहिए – kittu