কোনো ডেটার টাইপ কী, সেটি জানা কোড মসৃণভাবে এবং এরর ছাড়াই চলার জন্য প্রায়ই খুবই গুরুত্বপূর্ণ।
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() নামের একটি মেথড আছে, যা যাচাই করে তার আর্গুমেন্টটি একটি অ্যারে কি না।
ওয়েবপেজের 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
উত্তরাধিকারসূত্রে পাওয়া প্রপার্টি ও মেথডের জন্য 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
আপনাকে একটি রিসাইক্লিং সেন্টারে নিয়োগ করা হয়েছে। জায়গার অভাবে সব পণ্য একই কনভেয়র বেল্টে রাখা হয়, কিন্তু এর ফলে ভিন্ন ভিন্ন উপাদান একসাথে মিশে যায় এবং সেগুলো ব্যবহারের অযোগ্য হয়ে পড়ে। এটি ঠিক করার জন্য আপনাকে এমন ফাংশন বানানোর দায়িত্ব দেওয়া হয়েছে, যা কোনো পণ্যের ধরন শনাক্ত করতে পারে।
isBoolean ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো মান বুলিয়ান কি না।
isBoolean(true);
// => true
isBoolean(null);
// => false
isNumber ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো মান একটি সীমাবদ্ধ number বা bigint, অর্থাৎ NaN বা Infinity নয়।
কখনো কখনো আইডি পড়ার ডিভাইসটি নষ্ট হয়ে যায় এবং কোনো অ-সংখ্যাসূচক মানকে NaN (Not a Number, অর্থাৎ সংখ্যা নয়) বা Infinity হিসেবে পড়ে।
আপনার ফাংশনের এটি সঠিকভাবে সামলাতে পারা উচিত।
isNumber(42);
// => true
isNumber('Hello, World!');
// => false
isNumber(42n);
// => true
isNumber(NaN);
// => false
isObject ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করবে যে মানটি একটি অবজেক্ট কি না।
কনভেয়রে null কিছুই নয় এবং এটি অবজেক্ট হিসেবে গণ্য হয় না।
isObject({ greeting: 'Hello' });
// => true
isObject(25n);
// => false
isNumericString ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করবে যে মানটি এমন একটি স্ট্রিং কি না, যেটি শুধু অঙ্ক দিয়ে গঠিত, অথবা একটি বিয়োগ চিহ্নের পরে অঙ্ক, যা একটি ঋণাত্মক সংখ্যা বোঝায়।
এখানে কেবল পূর্ণসংখ্যাকে বিবেচনা করতে হবে, রিসাইক্লিং রোবটের এই যাচাইয়ে দশমিক সংখ্যাকে সংখ্যাসূচক হিসেবে গণ্য করা হয় না।
isNumericString(42);
// => false
isNumericString('42');
// => true
isNumericString('Hi!');
// => false
isElectronic ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো অবজেক্ট প্রদত্ত ElectronicDevice ক্লাস বা তার কোনো চাইল্ড ক্লাসের ইনস্ট্যান্স কি না।
class Duck {
//...
}
class WashingMachine extends ElectronicDevice {
//...
}
isElectronic(new Duck());
// => false
isElectronic(new WashingMachine());
// => true
isNonEmptyArray ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো মান একটি অ-খালি অ্যারে কি না।
isNonEmptyArray([1, 2, 3]);
// => true
isNonEmptyArray([]);
// => false
isEmptyArray ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো মান একটি খালি অ্যারে কি না।
isEmptyArray([1, 2, 3]);
// => false
isEmptyArray([]);
// => true
type প্রপার্টি বা মেথড আছে কি না তা যাচাই করুনhasType ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো অবজেক্টের type প্রপার্টি বা মেথড আছে কি না।
class Keyboard(){
type(){
// ...
}
}
hasType({ type:"car", color:"red" })
// => true
hasType({ color:"green" })
// => false
hasType(new Keyboard())
// => true
id প্রপার্টি বা মেথড না থাকলে একটি এরর থ্রো করুনassertHasId ফাংশনটি ইমপ্লিমেন্ট করুন, যা কোনো অবজেক্টে id প্রপার্টি না থাকলে একটি Error থ্রো করবে।
যদি কোনো অবজেক্টে id প্রপার্টি থাকে, তাহলে এটি কিছুই রিটার্ন করা উচিত নয়।
assertHasId({ id: 42, color: 'red' });
// => undefined
assertHasId({ color: 'green' });
// Error: "Object is missing the 'id' property"
id প্রপার্টি আছে কি না তা যাচাই করুনhasIdProperty ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো অবজেক্টের id প্রপার্টি আছে কি না।
class SimpleData {
constructor() {
this.number = '42';
this.id = 'BC269327FE1D9B95';
}
}
class StealingData extends SimpleData {}
class MethodData {
constructor() {
this.number = '42';
this._id = 'BC269327FE1D9B95';
}
get id() {
return this._id;
}
}
hasIdProperty(new SimpleData());
// => true
hasIdProperty(new MethodData());
// => false
hasIdProperty(new StealingData());
// => false
type প্রপার্টি আছে কি না তা যাচাই করুনhasDefinedType ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো অবজেক্টের type প্রপার্টি আছে এবং তা undefined নয় কি না।
hasDefinedType({ type: undefined, color: 'red' });
// => false
hasDefinedType({ type: 'car', color: 'green' });
// => true
Exercism-এ সাইন আপ করুন, JavaScript ট্র্যাকের 37টি কনসেপ্ট159টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।