चिह्न

प्रतीक तुलनात्मक रूप से नए हैं ES6 में पेश किया गया प्रिमिटिव. प्रिमिटिव सिंबल से ऐसी यूनीक वैल्यू पता चलती है जो उनकी वैल्यू, किसी अन्य वैल्यू से मैच नहीं होती. इनमें, प्रिमिटिव अन्य सिंबल की वैल्यू भी शामिल हैं. एक जैसे वर्णों से बने दो स्ट्रिंग प्रिमिटिव का आकलन बराबर:

String() === String()
> true

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

हालांकि, Symbol() फ़ंक्शन का इस्तेमाल करके बनाए गए दो सिंबल नहीं पूरी तरह से बराबर:

Symbol() === Symbol()
> false

यह Trait आपको किसी ऑब्जेक्ट में, प्रॉपर्टी की यूनीक कुंजियों के तौर पर सिंबल का इस्तेमाल करने देता है. इससे ये किसी दूसरे कोड में जोड़ी जा सकने वाली कुंजियों के साथ टकराव होते हैं.

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 ऑब्जेक्ट की स्टैटिक प्रॉपर्टी होती हैं, जिनमें से हर एक खुद का एक प्रतीक है. जाने-माने चिह्नों के ज़रिए JavaScript में पहले से मौजूद तरीकों को ऐक्सेस और उनमें बदलाव करते हुए, Search Ads 360 के नए वर्शन का इस्तेमाल अनजाने में ओवरराइट होने से रोका जा सकता है.

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 का इस्तेमाल किया जा सकता है. इसलिए, ये सिम्बॉलिक वैल्यू हो सकती हैं जिसका इस्तेमाल "एक्सटेंशन पॉइंट" के तौर पर किया जाना चाहिए JavaScript को बेहतर बनाने वाले डेवलपर के लिए साथ ही, पुराने सिस्टम के साथ काम करने की सुविधा से जुड़ी समस्याओं को पेश किए बिना.

जाने-माने चिह्नों की वैल्यू को अक्सर इसके लिए @@ प्रीफ़िक्स या % में रैप किया गया उनकी कुंजियों और बदले जा सकने वाले प्रोटोटाइप के बीच अंतर कर सकता है. उदाहरण के लिए, @@match (या %match%), नहीं बदले जा सकने वाले Symbol.match का रेफ़रंस है, न कि String.prototype.match.

देखें कि आपको कितना समझ आया है

क्या सिंबल बनाने के लिए new का इस्तेमाल किया जा सकता है?

नहीं
हां

इनमें से कौनसा विकल्प `लोकप्रिय` चिह्नों के बारे में बताता है?

`चिह्न` ऑब्जेक्ट की स्टैटिक प्रॉपर्टी
अक्सर इस्तेमाल किए जाने वाले सिंबल
JavaScript के ऐक्सेस और बदलाव के लिए खास प्रॉपर्टी की पहले से मौजूद तरीके