जावास्क्रिप्ट में, सब कुछ एक वस्तु है (या कम से कम एक वस्तु के रूप में माना जा सकता है), आदिम (बूलियन, अशक्त, संख्या, तार और मूल्य undefined
(और ES6 में प्रतीक ) को छोड़कर ):
console.log(typeof true); // boolean
console.log(typeof 0); // number
console.log(typeof ""); // string
console.log(typeof undefined); // undefined
console.log(typeof null); // object
console.log(typeof []); // object
console.log(typeof {}); // object
console.log(typeof function () {}); // function
जैसा कि आप वस्तुओं, सरणियों और मूल्य null
को देख सकते हैं सभी वस्तुओं को माना जाता है ( null
यह एक वस्तु का संदर्भ है जो मौजूद नहीं है)। फ़ंक्शंस प्रतिष्ठित हैं क्योंकि वे एक विशेष प्रकार की कॉल करने योग्य वस्तु हैं। हालाँकि वे अभी भी वस्तुएं हैं।
दूसरी ओर शाब्दिक true
, 0
, ""
और undefined
नहीं वस्तुओं रहे हैं। वे जावास्क्रिप्ट में आदिम मूल्य हैं। हालाँकि, बूलियन्स, संख्याओं और तारों में भी कंस्ट्रक्टर होते हैं Boolean
, Number
और String
क्रमशः जो जोड़ा कार्यक्षमता प्रदान करने के लिए अपने संबंधित प्राइमेटिक्स को लपेटते हैं:
console.log(typeof new Boolean(true)); // object
console.log(typeof new Number(0)); // object
console.log(typeof new String("")); // object
जैसा कि आप देख सकते हैं कि जब आदिम मूल्य वस्तुओं के भीतर लपेटे जाते हैं Boolean
, Number
और String
निर्माणकर्ता क्रमशः ऑब्जेक्ट बन जाते हैं। instanceof
ऑपरेटर केवल वस्तुओं के लिए काम करता है (यही कारण है कि रिटर्न false
आदिम मूल्यों के लिए):
console.log(true instanceof Boolean); // false
console.log(0 instanceof Number); // false
console.log("" instanceof String); // false
console.log(new Boolean(true) instanceof Boolean); // true
console.log(new Number(0) instanceof Number); // true
console.log(new String("") instanceof String); // true
जैसा कि आप दोनों देख सकते हैं typeof
और instanceof
यह जांचने के लिए अपर्याप्त हैं कि क्या एक बूलियन, एक संख्या या एक स्ट्रिंग है - typeof
केवल आदिम बूलियन , संख्या और तारों के लिए काम करता है; और instanceof
आदिम बूलियन, संख्या और तारों के लिए काम नहीं करता है।
सौभाग्य से इस समस्या का एक सरल समाधान है। का डिफ़ॉल्ट कार्यान्वयन toString
(अर्थात जैसा कि यह मूल रूप से परिभाषित किया गया है Object.prototype.toString
) [[Class]]
आदिम मूल्यों और वस्तुओं दोनों की आंतरिक संपत्ति लौटाता है :
function classOf(value) {
return Object.prototype.toString.call(value);
}
console.log(classOf(true)); // [object Boolean]
console.log(classOf(0)); // [object Number]
console.log(classOf("")); // [object String]
console.log(classOf(new Boolean(true))); // [object Boolean]
console.log(classOf(new Number(0))); // [object Number]
console.log(classOf(new String(""))); // [object String]
[[Class]]
मूल्य की आंतरिक संपत्ति मूल्य से बहुत अधिक उपयोगी है typeof
। हम ऑपरेटर के Object.prototype.toString
अपने स्वयं के (अधिक उपयोगी) संस्करण बनाने के लिए उपयोग कर सकते हैं typeof
:
function typeOf(value) {
return Object.prototype.toString.call(value).slice(8, -1);
}
console.log(typeOf(true)); // Boolean
console.log(typeOf(0)); // Number
console.log(typeOf("")); // String
console.log(typeOf(new Boolean(true))); // Boolean
console.log(typeOf(new Number(0))); // Number
console.log(typeOf(new String(""))); // String
आशा है कि इस लेख से मदद मिली। आदिम और लिपटी वस्तुओं के बीच के अंतर के बारे में अधिक जानने के लिए निम्नलिखित ब्लॉग पोस्ट पढ़ें: द सीक्रेट लाइफ ऑफ जावास्क्रिप्ट प्राइमेटीज