210812 ๊ฐœ๋ฐœ๊ธฐ๋ก: Nullish Coalescing Operator(Null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž) ์ฐฉ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ์ 

2021. 8. 12. 23:56ใ†๐Ÿ“” TIL

 

๐ŸŒ€ If ๋ฌธ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค๋ ค๋‹ค, Null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž ๊นŒ์ง€ ์™”๋‹ค!

if ๋ฌธ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. 

ES2020 ์—์„œ ์ถ”๊ฐ€๋œ Null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์‚ผํ•ญ ์—ฐ์‚ฐ์ž์˜ ๊ธธ์ด๋งˆ์ € ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ด ๊ณผ์ •์—์„œ ๋‚ด๊ฐ€ ์ž˜๋ชป ์ƒ๊ฐํ•œ ๋ถ€๋ถ„์„ ๊ธฐ๋กํ•ด๋ณธ๋‹ค.

const header = {
     ...,
     'id': request.headers['id'] ? request.headers['id'] : null
}

header ๊ฐ์ฒด ๋‚ด๋ถ€ id ํ”„๋กœํผํ‹ฐ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ณผ์ •์„ ๋ณด์ž.

request.headers['id'] ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ๊ทธ ์ž์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด null ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค.


์ด๋Š” null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋”์šฑ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

const header = {
    ...,
    'id': request.headers['id'] ?? null
}


request.headers['id'] ์˜ ๊ฐ’์ด ์กด์žฌํ•˜๋ฏ€๋กœ (defined), ํ•ด๋‹น ๊ฐ’์„ ํ• ๋‹นํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—”(null, undefined) ์ผ ๋• ?? ๋’ค์˜ null์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋‚ด๊ฐ€ ์ž˜๋ชป ์ƒ๊ฐํ•œ ๋ถ€๋ถ„์€ ๋ฐ”๋กœ false ์˜ ๊ฒฝ์šฐ๋‹ค.

๋งŒ์•ฝ request.headers['id']์˜ ๊ฐ’์ด false ์—ฌ๋„, ๋‚˜๋Š” ๋‹น์—ฐํžˆ ?? ๋’ค์˜ null ์ด ํ• ๋‹น๋  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ๋‹ค.
ํ•˜์ง€๋งŒ ?? ์—ฐ์‚ฐ์ž๋Š” ๋‹‰ ๊ฐ’๋Œ€๋กœ null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž๋‹ค. null ๊ณผ false ๋Š” ์—„๊ฒฉํžˆ ๊ตฌ๋ถ„ํ•œ๋‹ค.

// ๋‘๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž ์ถœ๋ ฅ
let a; //undefined
console.log(a ?? 100) //100

a = undefined;
console.log(a ?? 200) //200

a = null;
console.log(a ?? 300) //300



// ์ฒซ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž ์ถœ๋ ฅ
a = false;
console.log(a ?? 400) // false

null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž์˜ ์ฒซ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ 'null, undefined' ์ผ ๊ฒฝ์šฐ์—๋งŒ ๋‘๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ์„ ํƒ ๋จ์„ ๊ธฐ์–ตํ•˜์ž!

 

โœ…  OR ์—ฐ์‚ฐ์ž ( || ) ์™€ Null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž( ?? ) ์ฐจ์ด

Null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž์™€ OR ์—ฐ์‚ฐ์ž(||)๋Š” ํ—ท๊ฐˆ๋ฆด ์—ฌ์ง€๊ฐ€ ๋‹ค๋ถ„ํ•˜๋‹ค.

| | ๋Š” ์ฒซ ๋ฒˆ์งธ truthy ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ ,  ??๋Š” ์ฒซ ๋ฒˆ์งธ ์ •์˜๋œ(defined๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

// OR (||) ์—ฐ์‚ฐ์ž
let a = 0;
console.log(a || 1)  // 1


// null (??) ์—ฐ์‚ฐ์ž
let a = 0
console.log(a ?? 1) // 0

์‹๋ณ„์ž a ๋Š” 0์œผ๋กœ ์ •์˜๋ผ ์žˆ์ง€๋งŒ, boolean ๊ฐ’ ๊ธฐ์ค€์—์„  false ์— ํ•ด๋‹น๋œ๋‹ค.

ํ•˜์ง€๋งŒ ์—„์—ฐํžˆ defined ๋œ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์—, null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž ๊ธฐ์ค€์œผ๋ก  0 ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค.