কোনো ডেটার টাইপ কী, সেটা জানা কোড মসৃণভাবে ও এরর ছাড়া চালানোর জন্য প্রায়ই খুব গুরুত্বপূর্ণ।
Javascript-এ একটি মান বা অবজেক্টের টাইপ যাচাই করার বেশ কয়েকটি উপায় আছে।
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"]।
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
Array ক্লাসে Array.isArray() নামে একটি মেথড আছে, যা যাচাই করে তার আর্গুমেন্টটি একটি অ্যারে কি না।
instanceof Array ওয়েবপেজের iframe-এর মতো ভিন্ন রেল্মে তৈরি করা অ্যারের ক্ষেত্রে কাজ করবে না, কিন্তু 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
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