বুনিয়াদি
আপনি এটি জানেন না তবে জাভাস্ক্রিপ্টে যখনই আমরা স্ট্রিং, সংখ্যা বা বুলিয়ান আদিমগুলির সাথে যোগাযোগ করি আমরা বস্তুর ছায়া এবং জবরদস্তির একটি লুকানো জগতে প্রবেশ করি।
স্ট্রিং, সংখ্যা, বুলিয়ান, নাল, অপরিজ্ঞাত এবং প্রতীক।
জাভাস্ক্রিপ্টে 7 আদিম ধরনের আছে: undefined, null, boolean, string, number, bigintএবং symbol। বাকি সবই একটি বস্তু। আদিম ধরণের boolean, stringএবং numberতাদের বস্তুর অংশগুলির দ্বারা মোড়ানো হতে পারে। এই বস্তুগুলি যথাক্রমে Boolean, Stringএবং Numberনির্মাণকারীর উদাহরণ ।
typeof true; //"boolean"
typeof new Boolean(true); //"object"
typeof "this is a string"; //"string"
typeof new String("this is a string"); //"object"
typeof 123; //"number"
typeof new Number(123); //"object"
আদিমদের যদি কোনও সম্পত্তি না থাকে তবে কেন কোনও "this is a string".lengthমান ফেরত দেয় ?
কারণ জাভাস্ক্রিপ্ট সহজেই আদিম এবং বস্তুর মধ্যে জোর করে দেবে। এক্ষেত্রে সম্পত্তির দৈর্ঘ্য অ্যাক্সেসের জন্য স্ট্রিংয়ের মান স্ট্রিং অবজেক্টে জোর করা হয়। স্ট্রিং অবজেক্টটি কেবলমাত্র দ্বিতীয় ভাগের জন্য ব্যবহৃত হয় যার পরে এটি আবর্জনা সংগ্রহের sশ্বরের কাছে উত্সর্গ করা হয় - তবে টিভি আবিষ্কারের শোতে আমরা অধরা প্রাণীটিকে ফাঁদে ফেলে আরও বিশ্লেষণের জন্য সংরক্ষণ করব…
এটি আরও প্রদর্শন করতে নিম্নলিখিত উদাহরণটি বিবেচনা করুন যেখানে আমরা স্ট্রিং কনস্ট্রাক্টর প্রোটোটাইপে একটি নতুন সম্পত্তি যুক্ত করছি।
String.prototype.sampleProperty = 5;
var str = "this is a string";
str.sampleProperty; // 5
এর মাধ্যমে আদিমগণের নিজ নিজ অবজেক্ট কনস্ট্রাক্টর দ্বারা নির্ধারিত সমস্ত বৈশিষ্ট্যে (পদ্ধতি সহ) অ্যাক্সেস রয়েছে।
সুতরাং আমরা দেখেছি যে আদিম প্রকারগুলি যথাযথভাবে তাদের নিজ নিজ অবজেক্টের প্রতিযোগিতায় বাধ্য করবে যখন প্রয়োজন হবে।
বিশ্লেষণ toString()পদ্ধতি
নিম্নলিখিত কোড বিবেচনা করুন
var myObj = {lhs: 3, rhs: 2};
var myFunc = function(){}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
myObj.toString(); // "[object Object]"
myFunc.toString(); // "function(){}"
myString.toString(); // "This is a sample String"
myNumber.toString(); // "4"
myArray.toString(); // "2,3,5"
উপরে আলোচিত হিসাবে, সত্যিই যা ঘটছে তা হল যখন আমরা toString()কোনও আদিম ধরণের পদ্ধতিতে কল করি তখন পদ্ধতিটি চালুর আগে এটি তার অবজেক্টের অংশে জবরদস্ত করতে হয়।
অর্থাত্ myNumber.toString()সমানNumber.prototype.toString.call(myNumber) অন্যান্য আদিম ধরণের এবং একইভাবে।
তবে কি যদি প্রিমিটিভ টাইপটিকে toString()তার সম্পর্কিত অবজেক্ট কনস্ট্রাক্টর ফাংশন কাউন্টার পার্টের পদ্ধতিতে প্রেরণের পরিবর্তে , আমরা আদিম টাইপটিকে toString()অবজেক্ট ফাংশন কনস্ট্রাক্টর ( Object.prototype.toString.call(x)) এর পদ্ধতিতে প্যারামিটার হিসাবে পাস করতে বাধ্য করি ?
অবজেক্ট.প্রোটোটাইপ.টো স্ট্রিং () এর আরও কাছাকাছি চেহারা
অনুযায়ী ডকুমেন্টেশন , যখন toString পদ্ধতি বলা হয়, নিম্নলিখিত পদক্ষেপ গ্রহণ করা হয়:
- যদি
thisমান হয় তবে undefinedফিরে আসুন "[object Undefined]"।
- যদি
thisমান হয় তবে nullফিরে আসুন "[object Null]"।
- এই মানটি যদি উপরের কোনওটি
Oনা হয়, তবে পাসিংকে কল toObjectকরার ফলাফল হোকthis আর্গুমেন্ট হিসাবে মানটি পারে।
- শ্রেণীর
[[Class]]অভ্যন্তরীণ সম্পত্তিটির মান হতে দিন O।
- স্ট্রিং মান তিন স্ট্রিংস concatenating ফল যে ফিরুন
"[object ", classএবং "]"।
নিম্নলিখিত উদাহরণ থেকে এটি বুঝতে
var myObj = {lhs: 3, rhs: 2};
var myFunc = function(){}
var myString = "This is a sample String";
var myNumber = 4;
var myArray = [2, 3, 5];
var myUndefined = undefined;
var myNull = null;
Object.prototype.toString.call(myObj); // "[object Object]"
Object.prototype.toString.call(myFunc); // "[object Function]"
Object.prototype.toString.call(myString); // "[object String]"
Object.prototype.toString.call(myNumber); // "[object Number]"
Object.prototype.toString.call(myArray); // "[object Array]"
Object.prototype.toString.call(myUndefined); // "[object Undefined]"
Object.prototype.toString.call(myNull); // "[object Null]"
তথ্যসূত্র:
https://es5.github.io/x15.2.html#x15.2.4.2
https://es5.github.io/x9.html#x9.9
https://javascriptweblog.wordpress.com/ 2010/09/27 /-গোপন-জীবন অফ জাভাস্ক্রিপ্ট-প্রিমিটিভের /