এই পোস্টটি হ'ল সম্পর্কে, যা Symbol()
আমি খুঁজে পেতে / তৈরি করতে এবং সত্য এবং উদাহরণগুলি খুঁজে পেতে পারি তার উদাহরণ সহ সরবরাহ করা।
TLDR;
Symbol()
ডাটা টাইপ, নাম ECMAScript 6 (ES6) এর রিলিজের সাথে চালু হয়।
সিম্বল সম্পর্কে দুটি কৌতূহলী তথ্য রয়েছে।
জাভাস্ক্রিপ্টে প্রথম ডেটা টাইপ এবং কেবলমাত্র ডেটা টাইপ যা কোনও আক্ষরিক হয়নি
যে কোনও ভেরিয়েবল, এর সাথে সংজ্ঞায়িত Symbol()
হয়ে অনন্য সামগ্রী পেয়ে যায় তবে এটি আসলে ব্যক্তিগত নয় ।
যে কোনও ডেটার নিজস্ব প্রতীক রয়েছে এবং একই ডেটার জন্য প্রতীকগুলি একই হবে । নিম্নলিখিত অনুচ্ছেদে আরও তথ্য, অন্যথায় এটি টিএলআরডি নয়; :)
আমি কীভাবে প্রতীকটির সূচনা করব?
1. ডিবাগযোগ্য মান সহ একটি অনন্য সনাক্তকারী পেতে To
আপনি এটি এইভাবে করতে পারেন:
var mySymbol1 = Symbol();
বা এইভাবে:
var mySymbol2 = Symbol("some text here");
"some text here"
স্ট্রিং প্রতীক থেকে নিষ্কাশিত করা যাবে না, এটা ঠিক ডিবাগ করার উদ্দেশ্যে জন্য একটি বিবরণ আছে। এটি কোনওভাবেই প্রতীকের আচরণ পরিবর্তন করে না। যদিও, আপনি console.log
এটি করতে পারেন (যা ন্যায্য, যেহেতু মানটি ডিবাগিংয়ের জন্য, যাতে অন্য কোনও লগ এন্ট্রি দিয়ে সেই লগটিকে ভুল না করে):
console.log(mySymbol2);
// Symbol(some text here)
২. কিছু স্ট্রিং ডেটার জন্য একটি চিহ্ন পেতে
এক্ষেত্রে প্রতীকটির মানটি আসলে বিবেচনায় নেওয়া হয় এবং এইভাবে দুটি প্রতীক অ-অনন্য হতে পারে।
var a1 = Symbol.for("test");
var a2 = Symbol.for("test");
console.log(a1 == a2); //true!
আসুন এই চিহ্নগুলিকে "দ্বিতীয় ধরণের" চিহ্নগুলি বলি। তারা কোনওভাবেই "প্রথম ধরণের" চিহ্নগুলি (যেমন সংজ্ঞায়িত চিহ্নগুলি Symbol(data)
) দিয়ে ছেদ করে না ।
পরবর্তী দুটি অনুচ্ছেদে কেবল প্রথম ধরণের প্রতীক রয়েছে।
পুরানো ডেটা ধরণের পরিবর্তে সিম্বল ব্যবহার করে কীভাবে উপকৃত হব?
আসুন প্রথমে একটি অবজেক্ট বিবেচনা করি, একটি স্ট্যান্ডার্ড ডেটা টাইপ। আমরা সেখানে কিছু কী-মান জোড় সংজ্ঞায়িত করতে পারি এবং কীটি নির্দিষ্ট করে মানগুলিতে অ্যাক্সেস পেতে পারি।
var persons = {"peter":"pan","jon":"doe"};
console.log(persons.peter);
// pan
পিটার নামটি সহ যদি আমাদের দুজন ব্যক্তি থাকে তবে কী হবে?
এটা করছি:
var persons = {"peter":"first", "peter":"pan"};
খুব একটা বোধগম্য হবে না।
সুতরাং, একই নামের দুটি একেবারে পৃথক ব্যক্তির সমস্যা বলে মনে হচ্ছে। এর পরে নতুন উল্লেখ করা যাক Symbol()
। এটি বাস্তব জীবনের একজন ব্যক্তির মতো - যে কোনও ব্যক্তি অনন্য , তবে তাদের নাম সমান হতে পারে। আসুন দুটি "ব্যক্তি" সংজ্ঞায়িত করা যাক।
var a = Symbol("peter");
var b = Symbol("peter");
এখন আমরা একই নামের সাথে দুটি পৃথক ব্যক্তি পেয়েছি। আমাদের ব্যক্তিরা কি আসলেই আলাদা? তারা হয়; আপনি এটি পরীক্ষা করতে পারেন:
console.log(a == b);
// false
আমরা কীভাবে সেখানে উপকৃত হব?
আমরা আপনার ব্যক্তিতে বিভিন্ন ব্যক্তির জন্য দুটি এন্ট্রি করতে পারি এবং সেগুলি কোনওভাবেই ভুল করা যায় না।
var firstPerson = Symbol("peter");
var secondPerson = Symbol("peter");
var persons = {[firstPerson]:"first", [secondPerson]:"pan"};
দ্রষ্টব্য:
এটি লক্ষ্য করার মতো, তবে এটির সাহায্যে অবজেক্টটির স্ট্রিংফাইং চিহ্নটি JSON.stringify
একটি চিহ্ন হিসাবে সিম্বলযুক্ত সমস্ত জুটি বাদ দেবে।
এক্সিকিউটিং Object.keys
হয় এই জাতীয় জুড়ি ফেরত দেয় না Symbol()->value
।
এই সূচনাটি ব্যবহার করে, প্রথম এবং দ্বিতীয় ব্যক্তিদের জন্য এন্ট্রিগুলি ভুল করা একেবারেই অসম্ভব। console.log
তাদের জন্য কল করা তাদের দ্বিতীয় নামগুলি সঠিকভাবে আউটপুট করবে।
console.log(persons[a]);
// first
console.log(persons[b]);
// pan
যখন অবজেক্টে ব্যবহার করা হয়, তখন এটি গণনাযোগ্য সম্পত্তি সংজ্ঞায়নের তুলনায় কীভাবে আলাদা?
প্রকৃতপক্ষে, কোনও সম্পত্তি থেকে গোপনে থাকা Object.keys
এবং গণনার সংজ্ঞা দেওয়ার একটি উপায় ইতিমধ্যে রয়েছে । এটা এখানে:
var anObject = {};
var fruit = "apple";
Object.defineProperty( anObject, fruit, {
enumerable: false,
value: "green"
});
কি পার্থক্য Symbol()
সেখানে এনেছে? পার্থক্যটি হ'ল আপনি এখনও সম্পত্তিটিকে Object.defineProperty
সাধারণ উপায়ে সংজ্ঞায়িত করতে পারেন :
console.log(anObject[fruit]); //green
console.log(anObject["apple"]); //green
console.log(anObject.apple); //green
এবং পূর্ববর্তী অনুচ্ছেদে যেমন সিম্বল দিয়ে সংজ্ঞায়িত করা হয়:
fruit = Symbol("apple");
আপনার ভেরিয়েবলটি জানা থাকলে কেবল তার মান পাওয়ার ক্ষমতা পাবেন
console.log(anObject[fruit]); //green
console.log(anObject["apple"]); //undefined
console.log(anObject.apple); //undefined
তদ্ব্যতীত, কী এর অধীনে অন্য কোনও সম্পত্তি নির্ধারণ করা "apple"
বস্তুটিকে পুরানোটিকে ফেলে দেবে (এবং যদি হার্ড-কোডিং থাকে তবে এটি একটি ত্রুটি ছুঁড়ে দিতে পারে)। তো, আর কোনও আপেল নেই! এটা সুন্দর. পূর্ববর্তী অনুচ্ছেদ উল্লেখ করে, প্রতীকগুলি অনন্য এবং একটি কীকে সংজ্ঞায়িত করছে Symbol()
যা এটি অনন্য করে তুলবে।
রূপান্তর এবং পরীক্ষার টাইপ করুন
অন্যান্য ডেটা ধরণের থেকে পৃথক, অন্য কোনও ডেটা ধরণে রূপান্তর করা অসম্ভব Symbol()
।
কল করে আদিম তথ্য প্রকারের ভিত্তিতে একটি প্রতীক "তৈরি" করা সম্ভব Symbol(data)
।
প্রকারটি পরীক্ষা করার ক্ষেত্রে কোনও পরিবর্তন হয় না।
function isSymbol ( variable ) {
return typeof someSymbol === "symbol";
}
var a_Symbol = Symbol("hey!");
var totally_Not_A_Symbol = "hey";
console.log(isSymbol(a_Symbol)); //true
console.log(isSymbol(totally_Not_A_Symbol)); //false