Vivasoft-logo

8.8 Symbols (āϏāĻŋāĻŽā§āĻŦāϞ) 

 

Symbol (āϏāĻŋāĻŽā§āĻŦāϞ) āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻĒā§āϰāĻŋāĻŽāĻŋāϟāĻŋāĻ­ ( primitive ) āϟāĻžāχāĻĒ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞāĨ¤ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĒā§āϰ⧋āĻĒāĻžāϰāϟāĻŋāϏ āĻšāĻŋāϏāĻžāĻŦ⧇ āφāĻŽāϰāĻž āϏāĻŦāϏāĻŽā§Ÿ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇āĻ“ āϏāĻŋāĻŽā§āĻŦāϞ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĒā§āϰ⧋āĻĒāĻžāϰāϟāĻŋāϏ āĻšāĻŋāϏ⧇āĻŦ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻ•āĻŋāϛ⧁ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āϏ⧁āĻŦāĻŋāϧāĻž āĻĻāĻŋāĻšā§āϛ⧇āĨ¤ āφāϜāϕ⧇ āφāĻŽāϰāĻž āϤāĻž āϜāĻžāύāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻŦā§‹āĨ¤

āϏāĻŋāĻŽā§āĻŦāϞ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϜāĻžāύāĻžāϰ āĻĒā§‚āĻ°ā§āĻŦ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āĻĄāĻžāϟāĻžāϟāĻžāχāĻĒ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϜāĻžāύāϤ⧇ āĻšāĻŦ⧇āĨ¤ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡ āĻĻ⧁āχ āϧāϰāϪ⧇āϰ āĻĄāĻžāϟāĻžāϟāĻžāχāĻĒ āφāĻ›ā§‡Â  āĻĒā§āϰāĻŋāĻŽāĻŋāϟāĻŋāĻ­( primitive ) āĻāĻŦāĻ‚ āύāύ-āĻĒā§āϰāĻŋāĻŽāĻŋāϟāĻŋāĻ­(non-primitive)āĨ¤Â 

āĻĒā§āϰāĻŋāĻŽāĻŋāϟāĻŋāĻ­ āĻĄāĻžāϟāĻžāϟāĻžāχāĻĒ āĻšāϞ⧋ āϏāĻŋāĻŽā§āĻĒāϞ āĻ­ā§āϝāĻžāϞ⧁ āϟāĻžāχāĻĒ āϝ⧇āĻŽāύāσ string, integer, float, boolean, undefined, null āĨ¤ āĻĒā§āϰāĻŋāĻŽāĻŋāϟāĻŋāĻ­ āĻĄāĻžāϟāĻžāϟāĻžāχāĻĒ immutable āĻ…āĻĨāĻŦāĻž āĻ…āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϝ⧋āĻ—ā§āϝāĨ¤ āĻĒā§āϰāĻŋāĻŽāĻŋāϟāĻŋāĻ­ āĻĄāĻžāϟāĻžāϟāĻžāχāĻĒ⧇ āĻ­ā§āϝāĻžāϞ⧁ āϰāĻŋāĻāϏāĻžāχāĻ¨Â  āĻ•āϰāĻž āϝāĻžā§Ÿ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āϝāĻžā§Ÿ āύāĻžāĨ¤

 
 
 
let x = 1;
x++;
 

āωāĻĒāϰ āĻāϰ āϕ⧋āĻĄ āĻŦā§āϞāϕ⧇ x āĻāϰ āĻ­ā§āϝāĻžāϞ⧁ āĻŦāĻžā§œāĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇ āĨ¤ āĻĻ⧇āϖ⧇ āĻŽāύ⧇ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āĻ­ā§āϝāĻžāϞ⧁ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšā§Ÿā§‡āϛ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāϏāϞ⧇ x āĻ āύāϤ⧁āύ āĻ­ā§āϝāĻžāϞ⧁ āϰāĻŋāĻāϏāĻžāχāύ āĻ•āϰāĻž āĻšā§Ÿā§‡āϛ⧇āĨ¤ āϝāĻĻāĻŋ āĻ­ā§āϝāĻžāϞ⧁ āϏāĻŽāĻžāύ āĻĨāĻžāϕ⧇ āϤāĻžāĻšāϞ⧇ āĻĻ⧁āχāϟāĻŋ āĻĒā§āϰāĻŋāĻŽāĻŋāϟāĻŋāĻ­ āĻ­ā§āϝāĻžāϞ⧁ āϏāĻŦāϏāĻŽā§Ÿ āχāĻ•ā§ā§ŸāĻžāϞāĨ¤

 
 
 
const first = “abc” + “def”;
const second = “ab” + “cd” + “ef”;
console.log(first === second); // true
 

āĻ•āĻŋāĻ¨ā§āϤ⧁ āύāύ-āĻĒā§āϰāĻŋāĻŽāĻŋāϟāĻŋāĻ­ āĻāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϤāĻž āĻ­āĻŋāĻ¨ā§āύāĨ¤

 
 
 
const obj1 = { name: “Intrinsic” };
const obj2 = { name: “Intrinsic” };
 
console.log(obj1 === obj2); // false
 

 

āĻāĻ–āύ āϝ⧇āĻšā§‡āϤ⧁ āφāĻŽāϰāĻž āĻĒā§āϰāĻŋāĻŽāĻŋāϟāĻŋāĻ­ āĻāĻŦāĻ‚ āύāύ-āĻĒā§āϰāĻŋāĻŽāĻŋāϟāĻŋāĻ­ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻŦ⧇āϏāĻŋāĻ• āϧāĻžāϰāĻŖāĻž āĻĒā§‡ā§Ÿā§‡āĻ›āĻŋ āφāĻŽāϰāĻž āϏāĻŋāĻŽā§āĻŦāϞ āĻ•āĻŋ āϤāĻž āϜāĻžāύāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻŋāĨ¤ āϏāĻŋāĻŽā§āĻŦāϞ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻŋāĻŽāĻŋāϟāĻŋāĻ­ āĻ­ā§āϝāĻžāϞ⧁ āϝāĻž āĻāĻ•āϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻŽāϤ⧋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĨ¤ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āϏāĻŋāĻŽā§āĻŦāϞ⧇āϰ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āχāύāĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āϏ āϤ⧈āϰ⧀ āĻ•āϰāϞ⧇ āϤāĻžāϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻāĻ• āĻāĻ•āϟāĻŋ āχāωāύāĻŋāĻ• āϏāĻŋāĻŽā§āĻŦāϞāĨ¤ āφāĻŦāĻžāϰ āϏāĻŋāĻŽā§āĻŦāϞ immutable āĻŦāĻž āĻ…āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϝ⧋āĻ—ā§āϝ āĨ¤ āύāĻŋāĻšā§‡āϰ āωāĻĻāĻžāĻšāϰāύ āϤāĻž āĻĻ⧇āĻ–āϞ⧇ āϜāĻŋāύāĻŋāώāϟāĻž āĻāĻ•āϟ⧁ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻšāĻŦā§‡Â 

 
 
 
const s1 = Symbol();
const s2 = Symbol();
 
console.log(s1 === s2); // false
 

āĻĒā§āϰāϤāĻŋāϟāĻŋ āϏāĻŋāĻŽā§āĻŦāϞ āχāωāύāĻŋāĻ•āĨ¤ āφāĻŽāϰāĻž āĻ…āĻĒāĻļāύāĻžāϞ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻĻāĻŋā§Ÿā§‡āĻ“ āϏāĻŋāĻŽā§āĻŦāϞ āϤ⧈āϰ⧀ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤

 
 
 
const x = Symbol(‘hey’);
console.log(x); // Symbol(hey)
 

āφāĻŽāϰāĻž āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ ‘āĻ•āĻŋ’ āĻšāĻŋāϏ⧇āĻŦ⧇ āϏāĻŋāĻŽā§āĻŦāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤Â Â 

 
 
 
let id = Symbol(“id”);
let person = {
name: “Jack”,
// adding symbol as a key
[id]: 123 // not “id”: 123
 
};
 
console.log(person); // {name: “Jack”, Symbol(id): 123}
 

āϏāĻŋāĻŽā§āĻŦāϞ āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋāϰ āĻ•āϞāĻŋāϏāύ āĻā§œāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻ…āύ⧇āĻ• āωāĻĒāĻ•āĻžāϰ⧀āĨ¤ āϧāϰāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āϟāĻž āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āφāϛ⧇ PersonāĨ¤ āĻĻ⧁āχāϟāĻŋ  āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ Person āĻ…āĻŦā§āĻœā§‡āĻ•ā§āϟāϟāĻŋ  āĻŽāĻĄāĻŋāĻĢāĻžāĻ‡Â  āĻ•āϰāϤ⧇ āϚāĻžā§ŸÂ  āĻāĻŦāĻ‚ Id āύāĻžāĻŽā§‡āϰ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋ āĻāĻĄ āĻ•āϰāϤ⧇ āϚāĻžā§Ÿ āĨ¤ āĻāĻ–āύ āĻĻ⧁āχāϟāĻŋ  āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ āĻāĻ•āχ āύāĻžāĻŽā§‡āϰ āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋ āĻāĻĄÂ  āĻ•āϰāϤ⧇ āϗ⧇āϞ⧇ āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋ āĻāϰ āĻ­ā§āϝāĻžāϞ⧁ āĻ“āĻ­āĻžāϰāϰāĻžāχāĻĄ āĻŦāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ āĻĢ⧇āϞāĻŦ⧇ āĨ¤ āĻāχ āϏāĻŽāĻ¸ā§āϝāĻž āφāĻŽāϰāĻž āϏāĻŋāĻŽā§āĻŦāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ āϏāĻŋāĻŽā§āĻŦāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāĻŽāϰāĻž āĻāĻ•āϟāĻž āχāωāύāĻŋāĻ• āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋ āϤ⧈āϰ⧀ āĻ•āϰ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤

 
 
 
let person = {
name: “Jack”
};
 
// creating Symbol
let id = Symbol(“id”);
 
// adding symbol as a key
person[id] = 12;
console.log(person[id]) // 12
 

āĻ…āĻ¨ā§āϝāϕ⧋āύ⧋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ āĻāĻ–āύ id āύāĻžāĻŽā§‡āϰ āϏāĻŋāĻŽā§āĻŦāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϞ⧇āĻ“ āĻĻ⧁āχ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāχ āϤāĻžāĻĻ⧇āϰ āύāĻŋāĻœā§‡āĻĻ⧇āϰ āϤ⧈āϰ⧀ āϏāĻŋāĻŽā§āĻŦāϞ āĻĄāĻžāϟāĻž āϖ⧁āρāĻœā§‡ āĻĒāĻžāĻŦ⧇āĨ¤Â 

āϝāĻĻāĻŋ string āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋ āϕ⧀ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϤ⧋ āϤāĻžāĻšāϞ⧇ āĻ­ā§āϝāĻžāϞ⧁ āĻ“āĻ­āĻžāϰāϰāĻžāχāϟ āĻšā§Ÿā§‡ āϝ⧇āϤāĨ¤

 
 
 
let person = {
name: “Jack”
};
 
// using string as key
// Program-1
person.id = 12;
console.log(person.id); // 12
 
 
 
 
// Another program overwrites value
// Program-2
person.id = ‘Another value’;
console.log(person.id); // Another value
 

 

āĻāĻ–āĻžāύ⧇ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ-ā§§ id āĻāϰ āĻ­ā§āϝāĻžāϞ⧁ 12 āĻāϏāĻžāχāύ āĻ•āϰāϞ⧇āĻ“ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ-⧍ āĻ­ā§āϝāĻžāϞ⧁ āĻšā§‡āĻžā§āϜ āĻ•āϰ⧇ āĻĢ⧇āϞ⧇āϛ⧇āĨ¤ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ-ā§§ āĻāĻ–āύ āφāϰ id āĻāϰ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ āĻ­ā§āϝāĻžāϞ⧁ āĻĒāĻžāĻŦ⧇ āύāĻžāĨ¤

  • āφāĻŽāϰāĻž āϝāϤāĻŦāĻžāϰ Symbol āϤ⧈āϰ⧀ āĻ•āϰāĻŋ, āĻĒā§āϰāĻ¤ā§āϝ⧇āĻ•āĻŦāĻžāϰ Symbol āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻ•āϰ⧇ āϤ⧈āϰ⧀ āĻ•āϰ⧇āĨ¤ āϝāĻžāϰ āĻ•āĻžāϰāϪ⧇ āĻĻ⧁āχāϟāĻžāϰ āĻ­ā§āϝāĻžāϞ⧁ āĻāĻ•āχ āĻĨāĻžāĻ•āϞ⧇āĻ“ āϤāĻžāϰāĻž āĻāĻ•āχ āĻšā§ŸāύāĻžāĨ¤

Symbol(‘foo’) === Symbol(‘foo’) // false
  • new āĻ•āĻŋāĻ“ā§ŸāĻžāĻ°ā§āĻĄ āĻĻāĻŋā§Ÿā§‡ Symbol āϤ⧈āϰ⧀ āĻ•āϰāĻž āϝāĻžā§ŸāύāĻžāĨ¤

let sym = new Symbol() // TypeError
  • āϝāĻĻāĻŋ āφāĻŽāϰāĻž Symbol wrapper āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϤ⧈āϰ⧀ āĻ•āϰāϤ⧇ āϚāĻžāχ, āϤāĻžāĻšāϞ⧇ Object() āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

let sym = Symbol(‘foo’)
typeof sym // “symbol”
let symObj = Object(sym)
typeof symObj // “object”
  • Symbol-keyed āĻĒā§āϰ⧋āĻĒāĻžāĻ°ā§āϟāĻŋāϗ⧁āϞ⧋ āĻāϕ⧇āĻŦāĻžāϰ⧇āχ āχāĻ—āύ⧋āϰ āĻ•āϰāĻž āĻšāĻŦ⧇ āϝāĻ–āύ JSON.stringify() āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšā§ŸāĨ¤

JSON.stringify({[Symbol(‘foo’)]: ‘foo’})
// ‘{}’
  • Symbol wrapper āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāϗ⧁āϞ⧋āϕ⧇ āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋ āĻšāĻŋāϏ⧇āĻŦ⧇āĻ“ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝāĻžā§ŸāĨ¤

let sym = Symbol(‘foo’)
let obj = {[sym]: 1}
obj[sym] // 1
obj[Object(sym)] // still 1
  • āύāĻŋāĻšā§‡āϰ āϕ⧋āĻĄ āĻ¸ā§āύāĻŋāĻĒ⧇āĻŸā§‡āϰ āφāωāϟāĻĒ⧁āϟ āĻ•āĻŋ āĻšāĻŦ⧇?

Symbol(‘dog’) === Symbol(‘dog’)
  • āύāĻŋāĻšā§‡āϰ āϕ⧋āĻĄ āĻ¸ā§āύāĻŋāĻĒ⧇āĻŸā§‡āϰ āφāωāϟāĻĒ⧁āϟ āĻ•āĻŋ āĻšāĻŦ⧇?
const car = Symbol(Ford);
console.log(car);
  • āύāĻŋāĻšā§‡āϰ āϕ⧋āĻĄ āĻ¸ā§āύāĻŋāĻĒ⧇āĻŸā§‡āϰ āφāωāϟāĻĒ⧁āϟ āĻ•āĻŋ āĻšāĻŦ⧇?
let animal = {
name: “Cow”
};
let age = Symbol(“age”);
animal[age] = 12;
console.log(animal[id])
  • āύāĻŋāĻšā§‡āϰ āϕ⧋āĻĄ āĻ¸ā§āύāĻŋāĻĒ⧇āĻŸā§‡āϰ āφāωāϟāĻĒ⧁āϟ āĻ•āĻŋ āĻšāĻŦ⧇?
JSON.stringify({[Symbol(‘name’)]: ‘name’})
  • āύāĻŋāĻšā§‡āϰ āϕ⧋āĻĄ āĻ¸ā§āύāĻŋāĻĒ⧇āĻŸā§‡āϰ āφāωāϟāĻĒ⧁āϟ āĻ•āĻŋ āĻšāĻŦ⧇?
let id = Symbol(“id”);
let car = {
name: “Tesla”,
[id]: 123
};
console.log(car);