পরিশিষ্ট

প্রোটোটাইপাল উত্তরাধিকার

null এবং undefined বাদ দিয়ে, প্রতিটি আদিম ডেটা টাইপের একটি প্রোটোটাইপ থাকে, একটি সংশ্লিষ্ট বস্তুর মোড়ক যা মানগুলির সাথে কাজ করার পদ্ধতি প্রদান করে। যখন একটি প্রিমিটিভের উপর একটি মেথড বা প্রপার্টি লুকআপ চালু করা হয়, তখন জাভাস্ক্রিপ্ট প্রিমিটিভকে পর্দার আড়ালে র‍্যাপ করে এবং মেথডটিকে কল করে বা র‍্যাপার অবজেক্টে প্রোপার্টি লুকআপ সঞ্চালন করে।

উদাহরণস্বরূপ, একটি স্ট্রিং লিটারেলের নিজস্ব কোনো পদ্ধতি নেই, তবে আপনি এটিতে .toUpperCase() পদ্ধতিটিকে কল করতে পারেন সংশ্লিষ্ট String অবজেক্ট র্যাপারকে ধন্যবাদ:

"this is a string literal".toUpperCase();
> THIS IS A STRING LITERAL

একে বলা হয় প্রোটোটাইপল ইনহেরিটেন্স —একটি মানের সংশ্লিষ্ট কনস্ট্রাক্টর থেকে বৈশিষ্ট্য এবং পদ্ধতির উত্তরাধিকার।

Number.prototype
> Number { 0 }
>  constructor: function Number()
>  toExponential: function toExponential()
>  toFixed: function toFixed()
>  toLocaleString: function toLocaleString()
>  toPrecision: function toPrecision()
>  toString: function toString()
>  valueOf: function valueOf()
>  <prototype>: Object {  }

আপনি শুধুমাত্র তাদের মান দ্বারা সংজ্ঞায়িত করার পরিবর্তে এই কন্সট্রাক্টরগুলি ব্যবহার করে আদিম তৈরি করতে পারেন। উদাহরণস্বরূপ, String কনস্ট্রাক্টর ব্যবহার করে একটি স্ট্রিং অবজেক্ট তৈরি করে, স্ট্রিং লিটারাল নয়: একটি অবজেক্ট যা শুধুমাত্র আমাদের স্ট্রিং মান ধারণ করে না, কিন্তু কনস্ট্রাক্টরের সমস্ত উত্তরাধিকারী বৈশিষ্ট্য এবং পদ্ধতিগুলিকে ধারণ করে।

const myString = new String( "I'm a string." );

myString;
> String { "I'm a string." }

typeof myString;
> "object"

myString.valueOf();
> "I'm a string."

বেশিরভাগ অংশে, ফলস্বরূপ বস্তুগুলি আমরা তাদের সংজ্ঞায়িত করার জন্য ব্যবহার করেছি এমন মান হিসাবে আচরণ করে। উদাহরণস্বরূপ, যদিও new Number কনস্ট্রাক্টর ব্যবহার করে একটি সংখ্যার মান সংজ্ঞায়িত করার ফলে Number প্রোটোটাইপের সমস্ত পদ্ধতি এবং বৈশিষ্ট্য রয়েছে এমন একটি বস্তুর ফলাফল, আপনি সেই বস্তুগুলিতে গাণিতিক অপারেটরগুলি ব্যবহার করতে পারেন ঠিক যেমন আপনি সংখ্যার আক্ষরিকগুলিতে করবেন:

const numberOne = new Number(1);
const numberTwo = new Number(2);

numberOne;
> Number { 1 }

typeof numberOne;
> "object"

numberTwo;
> Number { 2 }

typeof numberTwo;
> "object"

numberOne + numberTwo;
> 3

আপনাকে খুব কমই এই কনস্ট্রাক্টরগুলি ব্যবহার করতে হবে, কারণ জাভাস্ক্রিপ্টের অন্তর্নির্মিত প্রোটোটাইপল উত্তরাধিকার মানে তারা কোনও ব্যবহারিক সুবিধা প্রদান করে না। কনস্ট্রাক্টর ব্যবহার করে আদিম তৈরি করাও অপ্রত্যাশিত ফলাফলের দিকে নিয়ে যেতে পারে, কারণ ফলাফলটি একটি বস্তু, একটি সাধারণ আক্ষরিক নয়:

let stringLiteral = "String literal."

typeof stringLiteral;
> "string"

let stringObject = new String( "String object." );

stringObject
> "object"

এটি কঠোর তুলনা অপারেটরদের ব্যবহারকে জটিল করতে পারে:

const myStringLiteral = "My string";
const myStringObject = new String( "My string" );

myStringLiteral === "My string";
> true

myStringObject === "My string";
> false

স্বয়ংক্রিয় সেমিকোলন সন্নিবেশ (ASI)

একটি স্ক্রিপ্ট পার্স করার সময়, জাভাস্ক্রিপ্ট ইন্টারপ্রেটাররা বাদ দেওয়া সেমিকোলনগুলির উদাহরণগুলি সংশোধন করার চেষ্টা করার জন্য স্বয়ংক্রিয় সেমিকোলন সন্নিবেশ (ASI) নামক একটি বৈশিষ্ট্য ব্যবহার করতে পারে। যদি জাভাস্ক্রিপ্ট পার্সার এমন একটি টোকেনের সম্মুখীন হয় যা অনুমোদিত নয়, তবে এটি সম্ভাব্য সিনট্যাক্স ত্রুটি ঠিক করতে সেই টোকেনের আগে একটি সেমিকোলন যোগ করার চেষ্টা করে, যতক্ষণ না নিম্নলিখিত শর্তগুলির মধ্যে এক বা একাধিক সত্য হয়:

  • সেই টোকেনটি একটি লাইন বিরতির মাধ্যমে আগের টোকেন থেকে আলাদা করা হয়।
  • সেই টোকেনটি হল }
  • আগের টোকেনটি হল ) , এবং সন্নিবেশিত সেমিকোলন হবে a dowhile স্টেটমেন্টের শেষ সেমিকোলন।

আরও তথ্যের জন্য, ASI নিয়মগুলি পড়ুন।

উদাহরণস্বরূপ, নিম্নলিখিত বিবৃতিগুলির পরে সেমিকোলন বাদ দিলে ASI-এর কারণে সিনট্যাক্স ত্রুটি হবে না:

const myVariable =