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