2010-05-09 11 views
54

जावास्क्रिप्ट typeof एक ऑपरेटर और फ़ंक्शन है। क्या यह बेहतर ऑपरेटर या फ़ंक्शन के रूप में उपयोग किया जाता है? क्यूं कर?टाइपोफ़ एक ऑपरेटर है और एक फ़ंक्शन

+2

थोड़ा सा विषय: असल में, यह दुर्लभ है कि मैं इन दिनों 'टाइपोफ' का उपयोग करता हूं। AFAIK, 'typeof' प्रत्यक्ष जांच से धीमा है, क्योंकि इसे स्ट्रिंग को वापस करने के लिए कई अलग-अलग प्रकार की जांच करने की आवश्यकता है। इसलिए, मैं हमेशा इसके बजाय कन्स्ट्रक्टर (यदि संभव हो) की जांच करता हूं, जैसे, 'अगर (("हैलो")। कन्स्ट्रक्टर == स्ट्रिंग) {...} ' –

+2

@ सुने रasmुसेन - सीमित प्रोफाइलिंग से मैंने अभी किया है, फ़ायरफ़ॉक्स 3.6 में कन्स्ट्रक्टर चेक 'टाइपोफ' के रूप में धीमा है। मेरे पास एक 'var func = function() {}; था और फिर मैंने' टाइपफ func! = "फ़ंक्शन" 'चेक' के साथ-साथ 'func.constructor! = फ़ंक्शन' चेक दोनों किया था। पूर्व दो गुना तेज था। – JulianR

+0

यदि आप jQuery का उपयोग करते हैं तो 'टाइपोफ़' का निष्पादन समय नगण्य है। –

उत्तर

165

typeof एक ऑपरेटर है। आप आसानी से उपयोग कर इसे देख सकते हैं:

typeof(typeof) 

थे typeof एक समारोह, इस अभिव्यक्ति 'function' स्ट्रिंग वापसी होगी, लेकिन यह एक सिंटैक्स त्रुटि में परिणाम है:

js> typeof(typeof); 
typein:8: SyntaxError: syntax error: 
typein:8: typeof(typeof); 
typein:8: .............^ 

हां, तो typeof एक समारोह नहीं हो सकता। शायद संकेतन का कोष्ठक typeof(foo) बनाया आपको लगता है typeof एक समारोह है, लेकिन वाक्य रचना, उन कोष्ठक नहीं समारोह कॉल - वे, समूह के लिए इस्तेमाल किए जाने वाले बस (2 + 3) *2 की तरह हैं। वास्तव में, आप उनमें से किसी भी संख्या को जोड़ सकते हैं:

typeof(((((foo))))); // is equal to typeof foo; 
+3

नोट यह अन्य ऑपरेटरों के लिए सच है - '[] उदाहरण (ऑब्जेक्ट)'। –

5

मुझे लगता है कि आप चुनते हैं, जिन आप स्पष्टता के आधार पर चाहते हैं, एक आदत के रूप में मैं आमतौर पर निम्नलिखित तरीके से एक ऑपरेटर के रूप में उपयोग, क्योंकि यह बहुत स्पष्ट है, कम से कम IMO:

if(typeof thing === "string") { 
    alert("this is a string"); 
} 

if(typeof thing === "function") { 
    alert("this is a function"); 
} 

यह इस का विरोध किया है प्रारूप:

if(typeof(thing) === "string") { 
    alert("this is a string"); 
} 

मेरे लिए कौन-, बनाता है पढ़ने के लिए यह थोड़ा धीमा। यदि आप typeof(thing) करते हैं तो यह वही बात है, जो भी आपकी नाव तैरती है। You can get a full read and what strings to expect from types here

+0

तो कोई बेहतर तरीका नहीं समझा है? क्या जावास्क्रिप्ट शैली मार्गदर्शिका मौजूद है? – hekevintran

+0

@hekevintran - सभी के लिए एक विशिष्ट मानक मार्गदर्शिका नहीं है, आप परिपक्व होकर एक बड़ा ढांचा ढूंढ सकते हैं और शायद इसकी स्टाइल का पालन कर सकते हैं, jQuery या प्रोटोटाइप जैसे कुछ ... लेकिन फिर ये टीम की शैलियों हैं, इसलिए यह जरूरी नहीं है कि यह आवश्यक है "मानक"। –

+0

खूनी नरक, मैं संस "()" एस को निर्दिष्ट करने में सक्षम होने से अनजान था। –

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