জাভাস্ক্রিপ্টে আদিম (বুলিয়ান, নাল, সংখ্যা, স্ট্রিং এবং মান 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
না বস্তু। এগুলি জাভাস্ক্রিপ্টে আদিম মান। তবে Booleans, সংখ্যা এবং স্ট্রিং এছাড়াও কনস্ট্রাকটর আছে 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
আশা করি এই নিবন্ধটি সাহায্য করেছে। আদিম এবং মোড়ানো বস্তুর মধ্যে পার্থক্য সম্পর্কে আরও জানতে নিম্নলিখিত ব্লগ পোস্টটি পড়ুন: জাভাস্ক্রিপ্ট প্রিমিটিভসের গোপনীয় জীবন