ट्रैक
/
JavaScript
JavaScript
/
सिलेबस
/
टाइप चेकिंग
टा

टाइप चेकिंग में JavaScript

1 अभ्यास

टाइप चेकिंग के बारे में

किसी डेटा का टाइप क्या है, यह जानना कोड के सुचारू रूप से और बिना एरर के चलने के लिए अक्सर बहुत ज़रूरी होता है।

JavaScript में किसी वैल्यू या ऑब्जेक्ट का टाइप जाँचने के कई तरीके हैं।

Note

JavaScript के टाइप जाँचने के तरीके कुछ हद तक भरोसेमंद नहीं होते।

बेहतर टाइप सुरक्षा और मज़बूत टाइप के लिए आपको शायद TypeScript इस्तेमाल करना चाहिए। यह एक ऐसी भाषा है जो JavaScript पर बनी है, लेकिन इसमें स्टैटिक टाइप वाली भाषा जैसा टाइप सिंटैक्स होता है।

typeof ऑपरेटर

typeof ऑपरेटर अपने ऑपरेंड का टाइप लौटाता है। इसका आउटपुट एक स्ट्रिंग होता है, जो प्रिमिटिव डेटा टाइप में से किसी एक के नाम से मेल खाता है, सिवाय "null" के। यह "function" या "object" भी हो सकता है।

typeof undefined;
// => "undefined"

typeof true;
// => "boolean"

typeof 42;
// => "number"

typeof 'Hello, World!';
// => "string"

typeof function () {
  return 'Hello, World';
};
// => "function"

typeof [1, 2, 3, 4];
// => "object"

typeof { city: 'Stockholm', country: 'Sweden' };
// => "object"

यह [typeof null is "object"][typeof null is "object"] की वजह से है।

instanceof ऑपरेटर

किसी ऑब्जेक्ट का टाइप जाँचने के लिए आप instanceof ऑपरेटर का उपयोग कर सकते हैं। यह एक boolean लौटाता है, जो इस पर निर्भर करता है कि दूसरा ऑपरेंड पहले ऑपरेंड की प्रोटोटाइप चेन में शामिल है या नहीं। साफ़ कहें तो, instanceof बताता है कि पहला ऑपरेंड दूसरे ऑपरेंड या उसकी किसी चाइल्ड क्लास का इंस्टेंस है या नहीं। instanceof सिर्फ ऑब्जेक्ट पर ही काम करता है।

class Beverage {
  // ...
}

// The Coffee class is a child of the Beverage class.
class Coffee extends Beverage {
  // ...
}

const java = new Coffee();

java instanceof Coffee;
// => true

java instanceof Beverage;
// => true
Advanced

Array क्लास में Array.isArray() नाम का एक मेथड है, जो जाँचता है कि उसे दिया गया आर्गुमेंट एक ऐरे है या नहीं।

किसी वेब पेज के iframe जैसे किसी और रील्म में बने ऐरे पर instanceof Array काम नहीं करेगा, लेकिन Array.isArray() करेगा।

इसका कारण यह है कि हर रील्म में Array क्लास का कंस्ट्रक्टर अलग होता है, और हर iframe का अपना रील्म होता है। इसका मतलब है कि प्रोटोटाइप चेन में वह फंक्शन अलग होगा, जिससे instanceof Array फेल हो जाता है। Array.isArray() इस बात को नज़रअंदाज़ कर सकता है, और जब भी संभव हो इसका इस्तेमाल करना चाहिए।

यह उन गलत पहचानों से भी बच जाता है जहाँ कोई ऑब्जेक्ट वास्तव में Array नहीं है और सिर्फ़ उसकी प्रोटोटाइप चेन में Array मौजूद है।

({ __proto__: Array.prototype }) instanceof Array
// => true

Array.isArray({ __proto__: Array.prototype })
// => false

in ऑपरेटर

in ऑपरेटर बताता है कि पहला ऑपरेंड दूसरे ऑपरेंड की प्रॉपर्टी है या नहीं। यह नहीं जाँचता कि उस प्रॉपर्टी की कोई वैल्यू तय है या नहीं। जिस प्रॉपर्टी को undefined पर सेट किया गया हो, उसे भी in पकड़ लेता है।

class Coffee {
  constructor() {
    this.temperature = 'hot';
    this.isDarkMatter = undefined;
  }

  coolDown() {
    this.temperature = 'warm';
  }
}

const espresso = new Coffee();

'temperature' in espresso;
// => true

'color' in espresso;
// => false

'isDarkMatter' in espresso;
// => true
Note

विरासत में मिली प्रॉपर्टी और मेथड के लिए भी in true लौटाता है।

"coolDown" in espresso
// => true

"constructor" in espresso
// => true

इससे बचने के लिए Object.hasOwn() का इस्तेमाल कीजिए

Object.hasOwn() फंक्शन

Object.hasOwn() मेथड बताता है कि निर्दिष्ट ऑब्जेक्ट दी गई प्रॉपर्टी का खुद का है या नहीं (यानी वह विरासत में नहीं मिली है और न ही कोई मेथड है)।

class Coffee {
  constructor() {
    this.temperature = 'hot';
  }

  coolDown() {
    this.temperature = 'warm';
  }
}
const cappuccino = new Coffee();

Object.hasOwn(cappucino, 'temperature');
// => true

Object.hasOwn(cappucino, 'constructor');
// => false

Object.hasOwn(cappucino, 'coolDown');
// => false
GitHub के ज़रिए संपादित करें यह लिंक नई विंडो या टैब में खुलता है।

टाइप चेकिंग सीखिए