๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JavaScript

[๋‚ด๋ณด๋‚ด๋ฒˆ] JavaScript - JavaScript Double Equals vs. Triple Equals

GitHub์— ์žˆ๋Š” 33 Concepts Every JavaScript Developer Should Know ๋ผ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋‚ด์šฉ ์ค‘ ๊ณต๋ถ€ํ•˜๊ณ  ์‹ถ์€ ์•„ํ‹ฐํด์„ ๋‚ด๊ฐ€ ์ •๋ฆฌํ•  ๊ฒธ ๊ธฐ์–ตํ•  ๊ฒธ ์ž‘์„ฑํ•˜๋Š” ๋ฒˆ์—ญ๊ธ€์ด๋‹ค. 33๊ฐ€์ง€ ์ค‘ ๋‹ค์„ฏ ๋ฒˆ์งธ์ธ == vs === vs typeof์™€ ๊ด€๋ จ๋œ ๋‚ด์šฉ์ด๋‹ค.

โ€ป ๋‚ด๋ณด๋‚ด๋ฒˆ(๋‚ด๊ฐ€ ๋ณด๋ ค๊ณ  ๋‚ด๊ฐ€ ๋ฒˆ์—ญํ•œ): ์˜์–ด ์ „๊ณต์ž๋„ ํ•ด์™ธ ์œ ํ•™ํŒŒ๋„ ์•„๋‹ˆ๊ธฐ์— ๋ฒˆ์—ญ์—๋Š” ์˜์—ญ, ์˜ค์—ญ, ๊ตฌ๊ธ€ ๋ฒˆ์—ญ์ด ๋ฌด์ˆ˜ํžˆ ๋งŽ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์˜คํƒ€๋„ ๋งŽ์„ ์ˆ˜ ์žˆ๋‹ค. ์ •ํ™•ํ•œ ๋‚ด์šฉ์€ ์›๋ฌธ์„ ์ง์ ‘ ์‚ดํŽด๋ณด๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ •๋ณด๋“ค์„ ๋” ์ฐพ์•„๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.
(ํ•˜์ง€๋งŒ ๋Œ“๊ธ€ ํ”ผ๋“œ๋ฐฑ๋„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค๐Ÿ˜ƒ )

์ด๋ฒˆ์— ๊ณ ๋ฅธ ์•„ํ‹ฐํด์€ Brandon Morelli ๋‹˜์ด ์ž‘์„ฑํ•˜์‹  JavaScript — Double Equals vs. Triple Equals ์ด๋‹ค. ๋‚ด์šฉ ์ค‘๊ฐ„์ค‘๊ฐ„ ๐Ÿค”์ด ์•„์ด์ฝ˜์€ ๋ณธ๋ฌธ์— ๋‚˜์™€ ์žˆ์ง€ ์•Š์€ ๋ฒˆ์—ญํ•˜๋ฉฐ ์ถ”๊ฐ€ํ•œ ๋ง์ด๋‹ค. 

 

Medium

 

codeburst.io


๋ฌธ์ œ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฒ‰๋ณด๊ธฐ์—๋Š” ๋น„์Šทํ•˜๊ธฐ๋งŒ ๋งค์šฐ ๋‹ค๋ฅธ ๋™๋“ฑ์„ฑ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. == ํ˜น์€ ===๋กœ ๋™๋“ฑํ•œ ์ง€๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ๋“ค์ด ์ฐจ์ด์ ์ด๋‹ค. : 

===

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ===๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—„๊ฒฉํ•œ ๋™๋“ฑ(์ผ์น˜)์— ๋Œ€ํ•ด์„œ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด ์˜๋ฏธ๋Š” ๋น„๊ตํ•˜๊ณ  ์žˆ๋Š” ํƒ€์ž…(ํ˜•)๊ณผ ๊ฐ’ ๋ชจ๋‘ ๊ฐ™์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

์—„๊ฒฉํ•œ ๋™๋“ฑ(์ผ์น˜)์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž.

์ด ์ฒซ ๋ฒˆ์งธ ์˜ˆ์‹œ์—์„œ ์ˆซ์ž 5๋ฅผ ์ˆซ์ž 5์™€ ๋น„๊ตํ•œ๋‹ค. ์˜ˆ์ƒํ•œ ๋ฐ”์™€ ๊ฐ™์ด, true๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค. ๋‘˜ ๋‹ค ์ˆซ์ž์ด๊ณ  ๊ฐ™์€ ๊ฐ’ 5๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

5 === 5
// true

์ด ์ ์„ ์—ผ๋‘์— ๋‘๊ณ , true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์˜ˆ์‹œ๋ฅผ ๋” ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค: 

'hello world' === 'hello world'
// true (Both Strings, equal values)

true === true
// true (Both Booleans, equal values)

 

๋ฉ‹์ง€๋‹ค. ์ด์ œ false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค:

์ด ์˜ˆ์‹œ์—์„œ ์ˆซ์ž 77๊ณผ ๋ฌธ์ž์—ด 77์„ ๋น„๊ตํ•  ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ํƒ€์ž…(ํ˜•)์„ ๊ฐ–๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๊ฒƒ์€ false๋ฅผ ๋ฐ˜ํ™˜ํ•  ๊ฒƒ์ด๋‹ค. 

77 === '77'
// false (Number v. String)

์—ฌ๊ธฐ ์ถ”๊ฐ€๋กœ 2๊ฐœ์˜ ์˜ˆ์‹œ๊ฐ€ ๋” ์žˆ๋‹ค: 

'cat' === 'dog'
// false (Both are Strings, but have different values)

false === 0
// false (Different type and different value)

๋ฉ‹์ง€๋‹ค! ๋‹ค์‹œ ํ•œ๋ฒˆ ์–ธ๊ธ‰ํ•˜๋ฉด, ์ผ์น˜ ์—ฐ์‚ฐ์ž(===)์— ๋Œ€ํ•œ ์ฃผ์š”์ ์€ ์šฐ๋ฆฌ๊ฐ€ ๋น„๊ตํ•˜๋Š” ํƒ€์ž…(ํ˜•)๊ณผ ๊ฐ’ ๋ชจ๋‘ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

==

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ==๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋Š์Šจํ•œ ๋™๋“ฑ์„ฑ์— ๋Œ€ํ•ด์„œ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ==๋Š” ๊ฐ•์ œ ํ˜• ๋ณ€ํ™˜๋„ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

๊ฐ•์ œ ํ˜• ๋ณ€ํ™˜์˜ ์˜๋ฏธ๋Š” ๋‘ ๊ฐ’์„ ๊ณตํ†ต ์œ ํ˜•์œผ๋กœ์˜ ๋ณ€ํ™˜์„ ์‹œ๋„ํ•œ ํ›„์—๋งŒ ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

์˜ˆ์‹œ๊ฐ€ ์ด ์ ์„ ์„ค๋ช…ํ•ด์ค„ ๊ฒƒ์ด๋‹ค. ์•„๋ž˜์˜ ์˜ˆ์‹œ์— ๋Œ€ํ•ด ์•ž์—์„œ ์—„๊ฒฉํ•œ ๋™๋“ฑ์œผ๋กœ ๋น„๊ตํ–ˆ์„ ๋•Œ๋ฅผ ๋– ์˜ฌ๋ ค๋ณด๋ผ:

77 === '77'
// false (Number v. String)

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

77 == '77'
// true

true์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ•์ œ ํ˜• ๋ณ€ํ™˜ ๋•Œ๋ฌธ์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ค์ œ๋กœ ์šฐ๋ฆฌ์˜ ๊ฐ’๋“ค์„ ๋น„์Šทํ•œ ์œ ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ์— ๊ทธ ์‹œ๋„๋Š” ์„ฑ๊ณตํ–ˆ๋‹ค. ๋ฌธ์ž์—ด '77'์€ ์‰ฝ๊ฒŒ ์ˆซ์ž 77๋กœ ๋ณ€ํ™˜๋˜์—ˆ๋‹ค. 77์€ 77๊ณผ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— true๊ฐ€ ๋‚˜์˜จ ๊ฒƒ์ด๋‹ค.

์˜ˆ์‹œ๋ฅผ ํ•˜๋‚˜ ๋” ์‚ดํŽด๋ณด์ž.

 ์•ž์—์„œ false์™€ 0์ด ๊ฐ™์€์ง€ ์—„๊ฒฉํ•œ ๋™๋“ฑ์œผ๋กœ ๋น„๊ตํ•œ ๊ฒƒ์„ ๋– ์˜ฌ๋ ค๋ณด์ž:

false === 0
// false (Different type and different value)

 

์ด๊ฒƒ์€ ๋ช…๋ฐฑํžˆ false์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ™์€ ์‹์„ ๋Š์Šจํ•œ ๋™๋“ฑ์„ฑ ๋น„๊ต๋กœ ๋Œ๋ ค๋ณด๋ฉด...

false == 0
// true

true๋ฅผ ๋ฐ›์•˜๋‹ค? ์™œ ๊ทธ๋Ÿด๊นŒ? ์ด๊ฒƒ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ falsy ๊ฐ’(๐Ÿค”: Boolean ์ปจํ…์ŠคํŠธ์—์„œ false๋กœ ํ‰๊ฐ€๋˜๋Š” ๊ฐ’)๊ณผ ๊ด€๋ จ ์žˆ๋‹ค. ๋‹ค์Œ ๋ถ€๋ถ„์—์„œ ์ด ๊ฐœ๋…๊ณผ ๊ด€๋ จํ•ด์„œ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค. 

Falsy(๊ฑฐ์ง“ ๊ฐ™์€) ๊ฐ’

์ข‹๋‹ค, ์™œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ false == 0 ์ธ๊ฐ€? ๋ณต์žกํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ 0์€ falsy ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

๊ฐ•์ œ ํ˜• ๋ณ€ํ™˜์€ ์‹ค์ œ๋กœ 0์„ boolean false๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , false์™€ false๋Š” ๋™์ผํ•ด์ง„๋‹ค. 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ฃผ์˜ํ•ด์•ผ ํ•  6๊ฐ€์ง€ fasly ๊ฐ’์ด ์žˆ๋‹ค: 

  • false - boolean false
  • 0 - ์ˆซ์ž zero
  • "" - ๋นˆ ๋ฌธ์ž์—ด
  • null
  • undefined
  • NaN - Not A Number ์ˆซ์ž๊ฐ€ ์•„๋‹˜

Falsy(๊ฑฐ์ง“ ๊ฐ™์€) ๊ฐ’ ๋น„๊ต

์•„๋ž˜์˜ ๋‚ด์šฉ์„ falsy ๊ฐ’์˜ ๊ทœ์น™์ด๋ผ๊ณ  ๋ด๋„ ๋œ๋‹ค. ์ด ๊ทœ์น™๋“ค์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๋ฉด ๊ฒฐ๊ตญ์€ ์•”๊ธฐํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค์ด๋‹ค. 

1. false, 0, ๊ทธ๋ฆฌ๊ณ  ""
์•ž์— ์„ธ ๊ฐ€์ง€ falsy ๊ฐ’ ์ค‘ ์–ด๋Š ๊ฒƒ์ด๋“  ๋Š์Šจํ•œ ๋™๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๊ตํ•˜๋ฉด ํ•ญ์ƒ ๊ฐ™์„ ๊ฒƒ์ด๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ด ๊ฐ’๋“ค์ด ๋ชจ๋‘ boolean false๋กœ ๊ฐ•์ œ ํ˜• ๋ณ€ํ™˜๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

false == 0
// true

0 == ""
// true

"" == false
// true

2. null๊ณผ undefined

null๊ณผ undefined๋ฅผ ๋น„๊ตํ•  ๋•Œ ์ด๋“ค๋ผ๋ฆฌ๋‚˜ ์„œ๋กœ์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฐ™๋‹ค: 

null == null
// true

undefined == undefined
// true

null == undefined
// true

null๊ณผ ๋‹ค๋ฅธ ๊ฐ’์„ ๋น„๊ตํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, false๋ฅผ ๋ฐ˜ํ™˜ํ•  ๊ฒƒ์ด๋‹ค.

3. NaN

๋งˆ์ง€๋ง‰์œผ๋กœ NaN์€ ๋‹ค๋ฅธ ์–ด๋–ค ๊ฒƒ๊ณผ๋„ ๊ฐ™์ง€ ์•Š๋‹ค. ์‹ฌ์ง€์–ด NaN๋ผ๋ฆฌ ๋น„๊ตํ•ด๋„ ๊ฐ™์ง€ ์•Š๋‹ค. 

NaN == null
// false

NaN == undefined
// false

NaN == NaN
// false

 ์ฃผ์š”์ 

  • ์‚ดํŽด๋ณธ ๊ฒƒ๊ณผ ๊ฐ™์ด, ๊ฐ•์ œ ํ˜• ๋ณ€ํ™˜์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ข€ ์ œ์ •์‹ ์ด ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ๋งค์šฐ ์นœ์ˆ™ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋Š์Šจํ•œ ๋™๋“ฑ(==)์€ ๊ทธ ๊ฐ€์น˜๋ณด๋‹ค ๋” ๋งŽ์€ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. 
    ์—ฌ์„ฏ ๊ฐ€์ง€ falsy ๊ฐ’๊ณผ ๊ทธ๋“ค๊ณผ ๊ด€๋ จ๋œ ๊ทœ์น™๋“ค์„ ๊ธฐ์–ตํ•˜๋ฉด ๋Š์Šจํ•œ ๋™๋“ฑ์„ ์ดํ•ดํ•˜๋Š”๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋‹ค. 
  • === ์—ฐ์‚ฐ์ž๋Š” ==๋ณด๋‹ค ๋” ๋›ฐ์–ด๋‚˜๋‹ค. ๊ฐ€๋Šฅํ•œ ํ•œ ์–ธ์ œ๋‚˜ ๋™์ผํ•œ์ง€๋ฅผ ๋น„๊ตํ•  ๋•Œ ===๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ํƒ€์ž…(ํ˜•)๊ณผ ๊ฐ’ ๋ชจ๋‘ ๋น„๊ตํ•จ์œผ๋กœ ํ•ญ์ƒ ์ง„์งœ ์ผ์น˜ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.