প্রতীক

চিহ্নগুলি ES6 এ প্রবর্তিত একটি অপেক্ষাকৃত নতুন আদিম। একটি চিহ্ন আদিম একটি অনন্য মানকে উপস্থাপন করে যা অন্য কোন মানের সাথে সংঘর্ষ করে না, অন্যান্য প্রতীক আদিমগুলির সাথে। অভিন্ন অক্ষর দ্বারা গঠিত দুটি স্ট্রিং আদিম কঠোরভাবে সমান হিসাবে মূল্যায়ন করে:

String() === String()
> true

String( "My string." ) === String( "My string." );
> true

যাইহোক, Symbol() ফাংশন ব্যবহার করে তৈরি করা কোন দুটি প্রতীক কখনোই কঠোরভাবে সমান হতে পারে না:

Symbol() === Symbol()
> false

এই বৈশিষ্ট্যটি আপনাকে একটি বস্তুতে অনন্য সম্পত্তি কী হিসাবে প্রতীকগুলি ব্যবহার করতে দেয়, কীগুলির সাথে সংঘর্ষ প্রতিরোধ করে অন্য কোনও কোড সেই বস্তুতে যোগ করতে পারে।

const mySymbol = Symbol( "Desc" );

const myObject = {

}

myObject
> Object { Symbol("Desc"): "propSymbol" }

তিন ধরনের প্রতীক আছে:

  • Symbol() দিয়ে চিহ্ন তৈরি করা হয়েছে
  • Symbol.for() ব্যবহার করে একটি গ্লোবাল সিম্বল রেজিস্ট্রি থেকে সেট করা এবং পুনরুদ্ধার করা শেয়ার করা চিহ্ন
  • "সুপরিচিত প্রতীক" প্রতীক বস্তুর স্ট্যাটিক বৈশিষ্ট্য হিসাবে সংজ্ঞায়িত। এই চিহ্নগুলিতে অভ্যন্তরীণ পদ্ধতি রয়েছে যা দুর্ঘটনাক্রমে ওভাররাইট করা যায় না।

Symbol() একটি ঐচ্ছিক যুক্তি হিসাবে একটি বর্ণনা (বা "প্রতীকের নাম") গ্রহণ করে। এই বিবরণগুলি ডিবাগিং উদ্দেশ্যে মানব-পাঠযোগ্য লেবেল, এবং তারা ফলাফলের স্বতন্ত্রতাকে প্রভাবিত করে না। Symbol -এ যে কোনো কল একটি সম্পূর্ণ অনন্য প্রতীক আদিম প্রদান করে, এমনকি একাধিক কলের অভিন্ন বর্ণনা থাকলেও:

Symbol( "My symbol." ) === Symbol( "My symbol." );
> false

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

let mySymbol = Symbol( "My symbol." );

mySymbol.description
> "My symbol."

কিন্তু আপনি new কীওয়ার্ড ব্যবহার করে একটি প্রতীক তৈরি করতে পারবেন না:

let mySymbol = new Symbol();

> Uncaught TypeError: Symbol is not a constructor

চিহ্নগুলি গণনাযোগ্য নয়, যার অর্থ তাদের উপর পুনরাবৃত্তি করার জন্য আদর্শ পদ্ধতি ব্যবহার করার সময় প্রতীকী বৈশিষ্ট্যগুলি উপলব্ধ নয়। getOwnPropertySymbols() পদ্ধতি একটি বস্তুর প্রতীক বৈশিষ্ট্য অ্যাক্সেস দেয়।

ভাগ করা প্রতীক

Symbol.for() পদ্ধতিটি চাবি হিসাবে একটি প্রদত্ত স্ট্রিং সহ রানটাইম-ওয়াইড গ্লোবাল সিম্বল রেজিস্ট্রিতে বিদ্যমান চিহ্নগুলি সন্ধান করার চেষ্টা করে এবং একটি পাওয়া গেলে মিলিত প্রতীকটি ফেরত দেয়। যদি এটি একটি খুঁজে না পায়, তবে এটি নির্দিষ্ট কী দিয়ে একটি প্রতীক তৈরি করে এবং এটি বিশ্বব্যাপী রেজিস্ট্রিতে যোগ করে:

let sharedSymbol = Symbol.for( "My key." );

sharedSymbol === Symbol.for( "My key." )
> true

এই কীগুলি লেখক-সৃষ্ট Symbol প্রাইমিটিভের জন্য বরাদ্দকৃত বিবরণের সাথে কোন কার্যকরী ওভারল্যাপ শেয়ার করে না। প্রতীক রেজিস্ট্রিতে একটি প্রতীক অ্যাক্সেস করতে, আপনাকে প্রথমে এটি ব্যবহার করে তৈরি করতে হবে for() :

Symbol( "String" ) === Symbol( "String" );
> false

Symbol( "String" ) === Symbol().for( "String" );
> false

Symbol().for( "String" ) === Symbol().for( "String" );
> true

প্রতীক রেজিস্ট্রি থেকে যেকোনো প্রতীকের কী পুনরুদ্ধার করতে, Symbol.keyFor() ব্যবহার করুন :

let mySymbol = Symbol.for( "Key." );

Symbol.keyFor( mySymbol ) ;
> "Key."

"সুপরিচিত" প্রতীক

সুপরিচিত চিহ্ন হল Symbol বস্তুর স্থির বৈশিষ্ট্য, যার প্রতিটি নিজেই একটি প্রতীক। সুপরিচিত প্রতীকগুলি জাভাস্ক্রিপ্টের অন্তর্নির্মিত পদ্ধতিগুলি অ্যাক্সেস এবং সংশোধন করার জন্য অনন্য সম্পত্তি কী প্রদান করে, যখন মূল আচরণকে অনিচ্ছাকৃতভাবে ওভাররাইট হওয়া থেকে বাধা দেয়।

Symbol;
> function Symbol()
    asyncIterator: Symbol(Symbol.asyncIterator)
    for: function for()
    hasInstance: Symbol("Symbol.hasInstance")
    isConcatSpreadable: Symbol("Symbol.isConcatSpreadable")
    iterator: Symbol(Symbol.iterator)
    keyFor: function keyFor()
    length: 0
    match: Symbol("Symbol.match")
    matchAll: Symbol("Symbol.matchAll")
    name: "Symbol"
    prototype: Object {  }
    replace: Symbol("Symbol.replace")
    search: Symbol("Symbol.search")
    species: Symbol("Symbol.species")
    split: Symbol("Symbol.split")
    toPrimitive: Symbol("Symbol.toPrimitive")
    toStringTag: Symbol("Symbol.toStringTag")
    unscopables: Symbol("Symbol.unscopables")
    <prototype>: function ()

যেহেতু প্রতীকগুলি ES6-এর জন্য নির্দিষ্ট একটি বৈশিষ্ট্য, তাই এই প্রতীকী মানগুলি ডেভেলপারদের জন্য "এক্সটেনশন পয়েন্ট" হিসাবে ব্যবহার করার উদ্দেশ্যে তৈরি করা হয়েছে যা জাভাস্ক্রিপ্টের আচরণ পরিবর্তন করে পিছনের-সামঞ্জস্যতার সমস্যাগুলি প্রবর্তন না করে।

সুপরিচিত প্রতীক মানগুলিকে প্রায়শই @@ উপসর্গ দিয়ে স্টাইলাইজ করা হয় বা তাদের পরিবর্তনযোগ্য প্রোটোটাইপ থেকে তাদের কীগুলিকে আলাদা করতে % এ মোড়ানো হয় । উদাহরণস্বরূপ, @@match (বা %match% ) হল অপরিবর্তনীয় Symbol.match এর একটি রেফারেন্স, String.prototype.match নয়।

আপনার উপলব্ধি পরীক্ষা করুন

আপনি একটি প্রতীক তৈরি করতে new ব্যবহার করতে পারেন?

না
হ্যাঁ

নিচের কোনটি `সুপরিচিত` প্রতীককে বর্ণনা করে?

`সিম্বল` বস্তুর স্ট্যাটিক বৈশিষ্ট্য
আপনি প্রায়শই ব্যবহার করেন এমন প্রতীক
জাভাস্ক্রিপ্টের অন্তর্নির্মিত পদ্ধতিগুলি অ্যাক্সেস এবং পরিবর্তন করার জন্য অনন্য সম্পত্তি কী