์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋™๋“ฑ ์—ฐ์‚ฐ์ž == ์™€ ์ผ์น˜ ์—ฐ์‚ฐ์ž ===

IT/Javascript

by J KIMS 2021. 1. 18. 12:08

๋ณธ๋ฌธ

๋ฐ˜์‘ํ˜•

 

๐Ÿ“ฃ Equality vs Identity

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋‘ ๊ฐœ์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ๋™์ผํ•œ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

- ๋™๋“ฑ ์—ฐ์‚ฐ์ž (equality operator) ==

- ์ผ์น˜ ์—ฐ์‚ฐ์ž (identity operator) ===

 

๋‘ ์—ฐ์‚ฐ์ž์˜ ์ฐจ์ด์ ์€, ๋™๋“ฑ ์—ฐ์‚ฐ์ž๋Š” ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•ด์„œ ๊ฒ€์‚ฌํ•˜๊ณ  ์ผ์น˜ ์—ฐ์‚ฐ์ž๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

const stringFive = '5';
const numberFive = 5;

// == loose equality, with type conversion
console.log(stringFive == numberFive); //true
console.log(stringFive != numberFive); //false

// === strict equality, no type conversion
console.log(stringFive === numberFive); //false
console.log(stringFive !== numberFive); //true

 

์œ„ ์ฝ”๋“œ์—์„œ ์—ฐ์‚ฐ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋™๋“ฑ ์—ฐ์‚ฐ์ž๋Š” '5'์™€ 5๋ฅผ ๊ฐ™๋‹ค๊ณ  ์ธ์‹ํ•œ๋‹ค. ์™œ๋ƒ๋ฉด ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•ด์„œ ๊ฒ€์‚ฌํ•˜๊ธฐ ๋ฌธ์ž์—ด๊ณผ ์ˆซ์ž๋ฅผ ๊ฐ™๋‹ค๊ณ  ๋ณด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ผ์น˜ ์—ฐ์‚ฐ์ž๋Š” ํƒ€์ž…์ด ๋‹ค๋ฅด๋ฉด ๊ฐ™์ง€ ์•Š๋‹ค๊ณ  ํŒ๋‹จํ•œ๋‹ค.

 

์ผ์น˜ ์—ฐ์‚ฐ์ž(===)์˜ ๊ฒ€์‚ฌ ๊ธฐ์ค€์ด ๋” ๋†’๊ธฐ ๋•Œ๋ฌธ์— strict equality๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค. ๋™๋“ฑ ์—ฐ์‚ฐ์ž(==)๋Š” loose equality๋ผ๊ณ ๋„ ํ•œ๋‹ค.

 

๐Ÿ’ก Object equality

 

์˜ค๋ธŒ์ ํŠธ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— referenceํ˜•ํƒœ๋กœ ์ €์žฅ๋œ๋‹ค. ์˜ค๋ธŒ์ ํŠธ๋ผ๋ฆฌ ๋น„๊ตํ•  ๋•Œ๋Š” Reference๊ฐ€ ๊ฐ™์€์ง€ ๊ฐ™์ง€ ์•Š์€์ง€๋ฅผ ํŒ๋‹จํ•œ๋‹ค.

 

const stringFive = '5';
const numberFive = 5;

// object equality by reference
const ellie1 = { name: 'ellie' };
const ellie2 = { name: 'ellie' };
const ellie3 = ellie1;
console.log(ellie1 == ellie2); //false
console.log(ellie1 === ellie2); //false
console.log(ellie1 === ellie3); //true

 

ellie1๊ณผ ellie2๋Š” ๋˜‘๊ฐ™์€ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ์ง€๋งŒ ์• ์ดˆ์— ๋‹ค๋ฅธ reference์— ์ €์žฅ๋๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ป๊ฒŒ ๋น„๊ตํ•ด๋„ False์ด๋‹ค.

 

ellie3์€ ellie1ํ•œํ…Œ์„œ reference๋ฅผ ๋„˜๊ฒจ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ reference๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค. ์ด ๋‘˜์„ ๋น„๊ตํ•˜๋ฉด True์ด๋‹ค.

 

์ถœ์ฒ˜ : ๋“œ๋ฆผ์ฝ”๋”ฉ

 

โœ… ์—ฐ์Šต ๋ฌธ์ œ

 

// equality - puzzler
console.log(0 == false); //t
console.log(0 === false); //f
//0,null,'',undefined๋Š” ๋‹ค false๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ๋‹ค
//0๋Š” bullean ํƒ€์ž…์ด ์•„๋‹ˆ๋ผ์„œ f

console.log('' == false); //t
console.log('' === false); //f
console.log(null == undefined); // t
console.log(null === undefined); // f

 

 

๐Ÿ“š Reference

- ์œ ํŠœ๋ธŒ ๋“œ๋ฆผ์ฝ”๋”ฉ by ์—˜๋ฆฌ : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ 4. ์ฝ”๋”ฉ์˜ ๊ธฐ๋ณธ

๋ฐ˜์‘ํ˜•

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ

๋Œ“๊ธ€ ์˜์—ญ