ํํ์ (expression)์ ์๋ฐ์คํฌ๋ฆฝํธ ์ธํฐํ๋ฆฌํฐ๊ฐ ๊ฐ์ผ๋ก ํ๊ฐํ๋(evaluate) ์๋ฐ์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ์ด๋ค. ์๋ฅผ ๋ค์ด ํ๋ก๊ทธ๋จ์ ํฌํจ๋ ์์์ ์์๋ ํํ์์ ์์ฃผ ๊ฐ๋จํ ํํ๋ค. ๋ณ์ ์ด๋ฆ ๋ํ ๊ฐ๋จํ ํํ์์ผ๋ก, ๋ณ์์ ํ ๋น๋ ์์์ ๊ฐ์ผ๋ก ํ๊ฐ๋๋ค. ์ด์ฒ๋ผ ๊ฐ๋จํ ํํ์๋ค์ ์ฌ์ฉํด ๋ณต์กํ ํํ์๋ ๋ง๋ค ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ฐฐ์ด ์ ๊ทผ ํํ์์ ์ด๋ฆฐ ๋๊ดํธ([) ์ ์ซ์๋ก ํ๊ฐ๋๋ ํํ์, ๋ซํ ๋๊ดํธ(])๊ฐ ๊ฒฐํฉ๋ ํ๋์ ํํ์์ด๋ค. ์ด๋ ๊ฒ ๊ฒฐํฉ๋ ๋ณต์ก ํํ์์ ๋ฐฐ์ด์ ํน์ ์์น์ ์ ์ฅ๋ ๊ฐ์ผ๋ก ํ๊ฐ๋๋ค. ์ด์ ์ ์ฌํ๊ฒ, ํจ์ ํธ์ถ ํํ์์ ํจ์ ๊ฐ์ฒด์ ์ธ์๋ก ์ฌ์ฉ๋๋ ํ๋ ์ด์์ ํํ์๋ค์ด ๊ฒฐํฉํด ํ๋์ ๋ณตํฉ ํํ์์ด ๋๋ค.
๋ณตํฉ ํํ์์ ๋ง๋๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ฐ์ฐ์(operator)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ์ฐ์ฐ์๋ ํผ์ฐ์ฐ์์ ๊ฐ๋ค์(๋ณดํต ๋ ๊ฐ) ์ด๋ป๊ฒ๋ ๊ฒฐํฉํด ์๋ก์ด ๊ฐ์ ๋ง๋ค์ด ๋ธ๋ค. ๊ณฑ์ ์ฐ์ฐ์ _๊ฐ ๊ทธ ๊ฐ๋จํ ์ฌ๋ก๋ค. ํํ์ x _ y๋ ํํ์ x์ y ๊ฐ์ ๊ณฑ์ผ๋ก ํ๊ฐ๋๋ค. ๊ฐ๋จํ ์ค๋ช ํ๊ธฐ ์ํด, ์ฐ์ฐ์๋ '๊ฐ์ผ๋ก ํ๊ฐ๋๋ค'๋ ํํ ๋์ , '๊ฐ์ ๋ฐํํ๋ค'๋ ํํ์ ์ฐ๊ธฐ๋ ํ๋ค.
์ด๋ฒ ์ฅ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฐ์ฐ์๋ฟ ์๋๋ผ, ๋ฐฐ์ด ์ฐธ์กฐ๋ ํจ์ ํธ์ถ์ฒ๋ผ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ง ์๋ ํํ์๋ ๋ค๋ฃฌ๋ค. ๋ง์ฝ ๋ ์ ์ฌ๋ฌ๋ถ์ด C ์คํ์ผ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๋ฐฐ์ด ์ ์ด ์๋ค๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ์ ํํ์๊ณผ ์ฐ์ฐ์ ๋ฌธ๋ฒ์ด ํ๊ฒฐ ์น์ํ ๊ฒ์ด๊ธฐ์ ์ด ์ฅ์ ์ข ๋ ๋น ๋ฅด๊ฒ ์ดํด๋ณผ ์ ์์ ๊ฒ์ด๋ค.
4.1 ๊ธฐ๋ณธ ํํ์ ๊ฐ์ฅ ๊ฐ๋จํ ํํ์ ํํ์์ '๊ธฐ๋ณธ ํํ์(primary expression)'์ผ๋ก, ๋ค๋ฅธ ํํ์์ ํฌํจํ์ง ์์ ๋ ๋ฆฝ์ ํํ์์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ธฐ๋ณธ ํํ์์ ์์๋ ๋ฆฌํฐ๋ด ๊ฐ, ํน์ ํค์๋๋ค ๊ทธ๋ฆฌ๊ณ ๋ณ์ ์ฐธ์กฐ๋ฅผ ๋งํ๋ค. ๋ฆฌํฐ๋ด์ ์์ ๊ฐ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ง์ ํฌํจ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ๋ค.
1.234 // ์ซ์ ๋ฆฌํฐ๋ด "hello" // ๋ฌธ์์ด ๋ฆฌํฐ๋ด /pattern/ // ์ ๊ท ํํ์ ๋ฆฌํฐ๋ด
์ซ์ ๋ฆฌํฐ๋ด์ ์์ฑํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ 3.1์ ์์, ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ 3.2์ ์์ ๋ค๋ค๋ค. ์ ๊ท ํํ์ ๋ฆฌํฐ๋ด ๋ฌธ๋ฒ๋ 3.2.4์์ ๊ฐ๋จํ ์๊ฐํ์ง๋ง 10์ฅ์์ ์ข ๋ ์์ธํ ๋ค๋ฃฌ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ฝ์ด ์ค์๋ ๊ธฐ๋ณธ ํํ์์ด ๋ช ๊ฐ ์๋ค.
true // ๋ถ๋ฆฌ์ธ true ๊ฐ์ผ๋ก ํ๊ฐ๋๋ค. false // ๋ถ๋ฆฌ์ธ false ๊ฐ์ผ๋ก ํ๊ฐ๋๋ค. null // null ๊ฐ์ผ๋ก ํ๊ฐ๋๋ค. this // 'ํ์ฌ' ๊ฐ์ฒด๋ก ํ๊ฐ๋๋ค.
3.3์ ๊ณผ 3.4์ ์์ true, false, null์ ๋ํด ์ดํด๋ดค๋ค. ๋ค๋ฅธ ํค์๋์๋ ๋ฌ๋ฆฌ this๋ ์์๊ฐ ์๋๊ณ ํ๋ก๊ทธ๋จ ์์์ ์์น์ ๋ฐ๋ผ ๊ฐ๊ธฐ ๋ค๋ฅธ ๊ฐ์ผ๋ก ํ๊ฐ๋๋ค. this ํค์๋๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค. ๋ฉ์๋์ ๋ณธ๋ฌธ ์์์ this๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด๋ก ํ๊ฐ๋๋ค. 4.5์ ๊ณผ 8์ฅ(ํนํ 8.2.2), 9์ฅ์์ this์ ๋ํด ์ข ๋ ์์ธํ ๋ค๋ฃจ๊ฒ ๋ค. ๋ง์ง๋ง์ผ๋ก ์ธ ๋ฒ์งธ ๊ธฐ๋ณธ ํํ์์ ๋ณ์๋ฅผ ์๋ ๊ทธ๋๋ก ์ฐธ์กฐํ๋ ํํ๋ค.
i // ๋ณ์ i์ ๊ฐ์ผ๋ก ํ๊ฐ๋๋ค. sum // ๋ณ์ sum์ ๊ฐ์ผ๋ก ํ๊ฐ๋๋ค. undefined // undefined๋ ์ ์ญ ๋ณ์๋ก null์ฒ๋ผ ํค์๋๊ฐ ์๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํ๋ก๊ทธ๋จ ์์ ์กด์ฌํ๋ ๊ฐ ์๋ณ์๋ค์ ์ผ๋จ ๋ณ์๋ผ๊ณ ๊ฐ์ ํ๊ณ ๊ฐ์ ์ดํด๋ณธ๋ค. ๋ง์ฝ ํด๋น ์๋ณ์๋ฅผ ์ด๋ฆ์ผ๋ก ํ๋ ๋ณ์๊ฐ ์๋ค๋ฉด, ํด๋น ํํ์์ undefined ๊ฐ์ผ๋ก ํ๊ฐ๋๋ค. ํ์ง๋ง ECMAScript 5์ ์๊ฒฉ ๋ชจ๋ (strict mode)์์๋ ์กด์ฌํ์ง ์๋ ๋ณ์๋ฅผ ํ๊ฐํ๋ ค๊ณ ํ๋ฉด ReferenceError ์์ธ๊ฐ ๋ฐ์ํ๋ค.
4.2 ๊ฐ์ฒด์ ๋ฐฐ์ด์ ์ด๊ธฐํ ํํ์
๊ฐ์ฒด์ ๋ฐฐ์ด ์ด๊ธฐํ ํํ์(initializer)์ ๋ง ๊ทธ๋๋ก ์๋ก ์์ฑ๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๊ฐ์ผ๋ก ํ๋ ํํ์์ด๋ค. ์ด๋ค ์ด๊ธฐํ ํํ์์ ์ข ์ข '๊ฐ์ฒด ๋ฆฌํฐ๋ด'๊ณผ '๋ฐฐ์ด ๋ฆฌํฐ๋ด' ์ด๋ผ๊ณ ํ๋ค. ํ์ง๋ง ์ผ๋ฐ ๋ฆฌํฐ๋ด๊ณผ๋ ๋ฌ๋ฆฌ, ์ด๋ค์ ๊ธฐ๋ณธ ํํ์์ด ์๋๋ค. ์ด๋ค ๋ฆฌํฐ๋ด์ ํ๋กํผํฐ์ ์์์ ๊ฐ์ ์ง์ ํ๋ ์๋ง์ ํ์ ํํ์์ ํฌํจํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐฐ์ด ์ด๊ธฐํ ๋ฌธ๋ฒ์ ์๋์ ์ผ๋ก ๊ฐ๋จํ๋, ์ด ๋ถ๋ถ๋ถํฐ ์ดํด๋ณด์. ๋ฐฐ์ด ์ด๊ธฐํ ํํ์์ ๋๊ดํธ ์์ ๋ด๊ธด ์ผํ๋ก ๊ตฌ๋ถ๋ ํํ์ ๋ฆฌ์คํธ๋ค. ๋ฐฐ์ด ์ด๊ธฐํ ํํ์์ ๊ฐ์ ์๋ก ์์ฑ๋ ๋ฐฐ์ด์ด๋ค. ์ด๋ ๊ฒ ์์ฑ๋ ๋ฐฐ์ด์ ์์๋ค์ ๊ฐ๊ฐ ์ผํ๋ก ๊ตฌ๋ถ๋ ํํ์์ ๊ฐ๋ค๋ก ์ด๊ธฐํ๋๋ค.
[] // ๋น ๋ฐฐ์ด: ๋๊ดํธ ์์ ํํ์์ด ์์ผ๋ฉด ์์๊ฐ ์์์ ๋ง ํ๋ค. [1+2, 3+4] // ๋ ๊ฐ์ ์์๋ฅผ ๊ฐ์ง ๋ฐฐ์ด. ์ฒซ ๋ฒ์งธ๋ 3, ๋ ๋ฒ์งธ๋ 7์ด๋ค.
๋ฐฐ์ด ์ด๊ธฐํ ํํ์์ ์ฌ์ฉ๋๋ ์์ ํํ์์ผ๋ก๋ ๋ ๋ค๋ฅธ ๋ฐฐ์ด ์ด๊ธฐํ ํํ์์ ์ฌ์ฉํ ์๋ ์๋ค. ๋ค์ ๋งํด, ์์ ํํ์ ์์ฒด๊ฐ ๋ฐฐ์ด์ด๋ผ๋ฉด ์ค์ฒฉ ๋ฐฐ์ด์ ๋ง๋ค ์๋ ์๋ค๋ ์๋ฏธ๋ค.
var matrix = [[1,2,3], [4,5,6], [7,8,9]];
๋ฐฐ์ด ์ด๊ธฐํ ํํ์์ ์ฌ์ฉ๋๋ ์์ ํํ์์ ๋งค๋ฒ ๋ฐฐ์ด์ด ์ด๊ธฐํ๋ ๋๋ง๋ค ํ๊ฐ๋๋ค. ์ด๋ ๋ฐฐ์ด ์ด๊ธฐํ ํํ์์ด ํ๊ฐ๋ ๋๋ง๋ค ์์์ ๊ฐ์ด ๋ฌ๋ผ์ง ์ ์์์ ๋ปํ๋ค. ๋ฐฐ์ด ๋ฆฌํฐ๋ด์์ ์ผํ ์ฌ์ด์ ๊ฐ์ ์๋ตํจ์ผ๋ก์จ ์์์ ๊ฐ์ ์ ์ํ์ง ์์์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ ๋ฐฐ์ด์ ์ธ ๊ฐ์ ์ ์๋์ง ์์ ์์๋ฅผ ํฌํจํด ์ด ๋ค์ฏ๊ฐ ์์๋ฅผ ๊ฐ๊ณ ์๋ค.
var sparseArray = [1,,,,,,5];
๋ฐฐ์ด ์ด๊ธฐํ ํํ์์ ๋ง์ง๋ง ์์ ํํ์ ๋ค์์ ์ผํ๊ฐ ์ฌ ์๋ ์์ง๋ง, ๊ทธ๋ ๋ค๊ณ ํด์ ๊ฐ์ด ์ ์๋์ง ์์ ์์๊ฐ ๋ง๋ค์ด์ง์ง๋ ์๋๋ค. ๊ฐ์ฒด ์ด๊ธฐํ ํํ์์ ๋ฐฐ์ด ์ด๊ธฐํ ํํ์๊ณผ ์ ์ฌํ๋ค. ํ์ง๋ง ๋๊ดํธ๊ฐ ์๋ ์ค๊ดํธ๊ฐ ์ฌ์ฉ๋๊ณ , ๊ฐ ํ์ ํํ์ ์์๋ ํ๋กํผํฐ ์ด๋ฆ๊ณผ ์ฝ๋ก (:)์ด ๋ถ๋๋ค.
var p = { x : 2.3, y : -1.2 }; // ๋ ๊ฐ์ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง ๊ฐ์ฒด var q = {}; // ํ๋กํผํฐ๊ฐ ์๋ ๋น ๊ฐ์ฒด q.x = 2.3; q.y = -1.2; // ๊ฐ์ฒด q์ p๋ ๊ฐ์ ํ๋กํผํฐ๋ฅผ ๊ฐ๋๋ค.
๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ค์ฒฉ๋ ์ ์๋ค. ์๋ฅผ ํตํด ์ดํด๋ณด์.
var rectangle = { upperLeft : { x : 2, y : 2 }, lowerRight : { x : 4, y : 5 } } ;
๊ฐ์ฒด ์ด๊ธฐํ์ ์ฌ์ฉํ ํํ์์ ๊ฐ์ฒด๊ฐ ์ด๊ธฐํ ๋ ๋๋ง๋ค ๋งค๋ฒ ํ๊ฐ๋๊ธฐ ๋๋ฌธ์ ์ผ์ ํ ๊ฐ์ ๊ฐ์ง ์๋๋ค. ๊ทธ ์์ฒด๋ก ์์์ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฐ์ฒด ๋ฆฌํฐ๋ด์์์ ํ๋กํผํฐ ์ด๋ฆ์ผ๋ก๋ ์๋ณ์ ๋์ ๋ฌธ์์ด์ ์ฌ์ฉํ ์๋ ์๋ค(์ด๋ ์์ฝ์ด๋, ์๋ณ์๋ก๋ ์ ํฉํ์ง ์์ ์ด๋ฆ์ ํ๋กํผํฐ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ ํ๊ณ ์ถ์ ๋ ์ ์ฉํ๋ค).
var side = 1; var square = { "upperLeft" : { x : p.x, y : p.y }, "lowerRight" : { x : p.x + side, y : p.y + side } } ;
๊ฐ์ฒด์ ๋ฐฐ์ด ์ด๊ธฐํ ํํ์์ 6์ฅ๊ณผ 7์ฅ์์ ์ข ๋ ์์ธํ ๋ค๋ฃฌ๋ค.
4.3 ํจ์ ์ ์ ํํ์
ํจ์ ์ ์ ํํ์ ( function definition expression)์ ํจ์๋ฅผ ์ ์ํ๊ณ , ํจ์ ์ ์ ํํ์์ ๊ฐ์ ์๋ก ์ ์๋ ํจ์๋ค. ๋ค์ ๋งํด, ํจ์ ์ ์ ํํ์์ 'ํจ์ ๋ฆฌํฐ๋ด'์ด๋ผ ํ ์ ์๋ค. ์ด๋ ๊ฐ์ฒด ์ด๊ธฐํ ํํ์์ '๊ฐ์ฒด ๋ฆฌํฐ๋ด' ์ด๋ผ๊ณ ๋งํ๋๊ฒ๊ณผ ๊ฐ๋ค. ํจ์ ์ ์ ํํ์์ ์ผ๋ฐ์ ์ผ๋ก function ํค์๋์ ์ค๊ดํธ๋ก ๋๋ฌ์ธ์ธ ์ผํ๋ก ๊ตฌ๋ถ๋ ์๋ณ์(๋งค๊ฐ๋ณ์ ์ด๋ฆ) ๋ชฉ๋ก, ์ค๊ดํธ๋ก ๋๋ฌ์ธ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋(ํจ์ ๋ชธ์ฒด)๋ก ์ด๋ฃจ์ด์ง๋ค. ์๋ฅผ ๋ค์ด, ๋ค์์ ์ฝ๋๋ฅผ ์ดํด๋ณด์.
// ์ด ํจ์๋ ์ ๋ฌ๋ ๊ฐ์ ์ ๊ณฑํ์ฌ ๋ฐํํ๋ค. var square = function(x) { return x * x; }
ํจ์ ์ ์ ํํ์์ ํจ์ ์ด๋ฆ์ ํฌํจํ ์ ์๋ค. ๋ํ ํจ์๋ ํจ์ ์ ์ ํํ์ ๋์ ์ ํจ์ ๊ตฌ๋ฌธ(function statement)์ ์ฌ์ฉํด ์ ์ํ ์ ์๋ค. ํจ์ ์ ์์ ๋ํด์๋ 8์ฅ์์ ์ข ๋ ์์ธํ ์์๋ณผ ๊ฒ์ด๋ค.
4.4 ํ๋กํผํฐ ์ ๊ทผ ํํ์
ํ๋กํผํฐ ์ ๊ทผ ํํ์์ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ๋ฐฐ์ด์ ์์ ๊ฐ์ผ๋ก ํ๊ฐ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋ ๊ฐ์ง ๋ฌธ๋ฒ์ผ๋ก ํ๋กํผํฐ์ ์ ๊ทผํ ์ ์๋ค.
ํํ์ . ์๋ณ์ ํํ์ [ ํํ์ ]
์ฒซ ๋ฒ์งธ ํ๋กํผํฐ ์ ๊ทผ ๋ฐฉ๋ฒ์ ํํ์์ ์๋ณ์๋ฅผ ์ (.)์ผ๋ก ์ฐ๊ฒฐํ ํํ์์ด๋ค. ์ฌ๊ธฐ์ ํํ์์ ๊ฐ์ฒด๋ฅผ ๋งํ๊ณ , ์๋ณ์๋ ์์์ ์ง์ ํ ๊ฐ์ฒด์์ ์ฐพ์ ํ๋กํผํฐ์ ์ด๋ฆ์ ์๋ฏธํ๋ค. ํ๋กํผํฐ ์ ๊ทผ์ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ด ๋๋ ์ฒซ ๋ฒ์งธ ํํ์ ๋ค์์ ์ด๋ฆฐ ๋๊ดํธ์ ๋ ๋ฒ์งธ ํํ์ ๊ทธ๋ฆฌ๊ณ ๋ซํ ๋๊ดํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ์ฌ์ฉํ ๋ ๋ฒ์งธ ํํ์์ ๊ฐ์ฒด์ ํน์ ํ๋กํผํฐ ์ด๋ฆ์ด๋ ๋ฐฐ์ด ๋ด ์์์ ์ธ๋ฑ์ค ๊ฐ์ด ๋ ์ ์๋ค. ๋ค์ ์์ ๋ฅผ ํตํด ์์ธํ ์ดํด๋ณด์.
var o = { x : 1, y : { z : 3 } }; // ๊ฐ๋จํ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ์์ var a = [o,4, [5,6]]; // ๊ฐ์ฒด๋ฅผ ํฌํจํ ๊ฐ๋จํ ๋ฐฐ์ด ๋ฆฌํฐ๋ด ์์ o.x // 1: ํํ์ o์ ํ๋กํผํฐ x์ ๊ฐ o.y.z // 3: ํํ์ o.y์ ํ๋กํผํฐ z์ ๊ฐ o["x"] // 1: ๊ฐ์ฒด o์ ํ๋กํผํฐ x์ ๊ฐ a[1] // 4: ํํ์ a์ ์ธ๋ฑ์ค 1 ์์น์ ์๋ ์์ ๊ฐ a[2]["1"] // 6: ํํ์ a[2]์ ์ธ๋ฑ์ค 1 ์์น์ ์๋ ์์ ๊ฐ a[0].x // 1: ํํ์ a[0]์ ํ๋กํผํฐ x์ ๊ฐ
๋ ํ๋กํผํฐ ์ ๊ทผ ํํ์ ๋ชจ๋ ์ (.)์ด๋ ๋๊ดํธ ([) ์ผ์ชฝ ํํ์์ด ๋จผ์ ํ๊ฐ๋๋ค. ๋ง์ฝ ํ๊ฐ๋ ๊ฐ์ด null ์ด๋ undefined์ด๋ฉด ์ด๋ค ๊ฐ์ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง ์๊ธฐ ๋๋ฌธ์ ํํ์์ TypeError ์์ธ๋ฅผ ๋ฐ์์ํจ๋ค. ๋ง์ฝ ๊ฐ์ด ๊ฐ์ฒด(๋๋ ๋ฐฐ์ด)๊ฐ ์๋๋ฉด ๊ฐ์ฒด๋ก ๋ณํ๋๋ค(3.6์ ์ฐธ๊ณ ). ๋ง์ฝ ๊ฐ์ฒด ํํ์ ๋ค์์ ์ (.)๊ณผ ์๋ณ์๊ฐ ์ฌ ๊ฒฝ์ฐ์๋ ์๋ณ์๋ฅผ ์ด๋ฆ์ผ๋ก ๊ฐ๋ ํ๋กํผํฐ์ ๊ฐ์ ์ฐพ๊ฒ ๋๊ณ , ์ด ๊ฐ์ด ์ ์ฒด ํํ์์ ๊ฐ์ด ๋๋ค. ๋ง์ฝ ๊ฐ์ฒด ํํ์ ๋ค์์ ๋ ๋ฒ์งธ ํํ์์ด ๋ด๊ธด ๋๊ดํธ๊ฐ ์ฌ ๊ฒฝ์ฐ์๋ ๋ ๋ฒ์งธ ํํ์์ด ํ๊ฐ๋๊ณ , ์ด ๊ฐ์ด ๋ฌธ์์ด๋ก ๋ณํ๋๋ค. ์ ์ฒด ํํ์์ ๊ฐ์ ์์์ ๋ณํ๋ ๋ฌธ์์ด์ ์ด๋ฆ์ผ๋ก ๊ฐ๋ ํ๋กํผํฐ์ ๊ฐ์ด ๋๋ค. ๋ ๊ฒฝ์ฐ ๋ชจ๋, ๊ฐ์ฒด์ ํด๋น ํ๋กํผํฐ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด, ํ๋กํผํฐ ์ ๊ทผ ํํ์์ ๊ฐ์ undefined๊ฐ ๋๋ค.
'. ์๋ณ์' ๋ฌธ๋ฒ์ด ๋ ๋ฐฉ๋ฒ ์ค ์ข ๋ ๊ฐ๋จํ๋ค. ํ์ง๋ง ์ ๊ทผํ๋ ค๋ ํ๋กํผํฐ ์ด๋ฆ์ด 'ํฉ๋ฒ์ ' ์๋ณ์์ผ ๋๋ง ์ฌ์ฉํ ์ ์๊ณ , ํ๋ก๊ทธ๋จ์ ์์ฑํ ๋ ๊ทธ ์๋ณ์๋ฅผ ๋ฏธ๋ฆฌ ์๊ณ ์์ด์ผ ํ๋ค. ๋ง์ฝ ํ๋กํผํฐ ์ด๋ฆ์ด ์์ฝ์ด์ด๊ฑฐ๋, ๊ตฌ๋์ ๋ฌธ์๋ ๊ณต๋ฐฑ์ ํฌํจํ๊ณ ์๊ฑฐ๋, ์ซ์(๋ฐฐ์ด์ ๊ฒฝ์ฐ)์ผ ๋๋ ๋ฐ๋์ ๋๊ดํธ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ๋๊ดํธ๋ ํ๋กํผํฐ ์ด๋ฆ์ด ๊ณ ์ ๋์ด ์์ง ์๊ณ , ๊ทธ ์ด๋ฆ ์์ฒด๊ฐ ์ด๋ค ์ฐ์ฐ์ ๊ฒฐ๊ณผ์ธ ๊ฒฝ์ฐ์๋ ์ฌ์ฉํ ์ ์๋ค ( 6.2.1์์ ๋ค๋ฃฌ ์์ ์ฐธ๊ณ ). ๊ฐ์ฒด์ ๊ฐ์ฒด ํ๋กํผํฐ์ ๋ํด์๋ 6์ฅ์์, ๋ฐฐ์ด๊ณผ ๋ฐฐ์ด์ ์์์ ๋ํด์๋ 7์ฅ์์ ์์ธํ ๋ค๋ฃฌ๋ค.
4.5 ํธ์ถ ํํ์
ํธ์ถ ํํ์(invocation expression)์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋(๋๋ ์คํ์ํค๋) ๋ฌธ๋ฒ์ด๊ณ , ํธ์ถ๋ ํจ์๋ฅผ ๊ฐ๋ฆฌํค๋ ํจ์ ํํ์์ผ๋ก ์์ํ๋ค. ๊ทธ ๋ค์๋ ์ฌ๋ ๊ดํธ๋ก ์์ํด ์ผํ(,)๋ก ๊ตฌ๋ถ๋ ์ฌ๋ฌ ๊ฐ์ ํธ์ถ ์ธ์ ๋ชฉ๋ก์ด ์ฌ ์ ์๊ณ , ๋ซ๋ ๊ดํธ๋ก ๋๋๋ค. ์๋ฅผ ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ๋ค.
f(0) // f๋ ํจ์ ํํ์์ด๋ค. ์ฌ๊ธฐ์ '0'์ ์ธ์ ํํ์์ด๋ค. Math.max(x,y,z) // Math.max๋ ํจ์๊ณ , x,y,z๊ฐ ํธ์ถ ์ธ์๋ค. a.sort() // a.sort๋ ํจ์๊ณ , ํธ์ถ ์ธ์๊ฐ ์๋ค.
ํธ์ถ ํํ์์ด ํ๊ฐ๋ ๋ ํจ์ ํํ์์ด ๊ฐ์ฅ ๋จผ์ ํ๊ฐ๋๊ณ , ๊ทธ ํ์ ํธ์ถ ์ธ์ ํํ์์ด ์์๋๋ก ์ธ์ ๊ฐ์ผ๋ก ํ๊ฐ๋๋ค. ํจ์ ํํ์์ ๊ฐ์ด ํธ์ถํ ์ ์๋ ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ๋ TypeError ์์ธ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค(๋ชจ๋ ํจ์๋ ํธ์ถ ๊ฐ๋ฅํ๋ค. ํจ์๊ฐ ์๋ ํธ์คํธ ๊ฐ์ฒด๋ ํธ์ถ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๊ทธ ์ฐจ์ด์ ์ 8.7.7์์ ์ดํด๋ณด๊ธฐ๋ก ํ๋ค). ์ธ์ ๊ฐ์ด ํ๊ฐ๋ ๋ค์์๋ ํจ์ ์ ์ธ ์ ์ง์ ํ๋ ์ธ์ ์ด๋ฆ์ ์ธ์ ๊ฐ์ด ์ฐจ๋ก๋ก ํ ๋น๋๊ณ , ๋ง์ง๋ง์ผ๋ก ํจ์์ ๋ณธ๋ฌธ์ด ์คํ๋๋ค. ๊ฐ์ ๋ฐํํ๊ธฐ ์ํด return๋ฌธ์ ์ฌ์ฉํ๋ฉด, ๊ทธ ๊ฐ์ด ๊ฒฐ๊ตญ ํธ์ถ ํํ์์ ๊ฐ์ด ๋๋ค. ํจ์๊ฐ ๊ฐ์ ๋ฐํํ์ง ์๋๋ค๋ฉด, ํจ์ ํํ์์ ๊ฐ์ undefined๊ฐ ๋๋ค. ํจ์ ํธ์ถ๊ณผ ๊ด๋ จํ ์ข ๋ ์์ธํ ์ฌํญ์ 8์ฅ์์ ์ดํด๋ณด๊ธฐ๋ก ํ์.
๋ชจ๋ ํธ์ถ ํํ์์ ํ ์์ ๊ดํธ () ์, ๊ดํธ ์์ ์ค๋ ํํ์์ผ๋ก ์ด๋ค์ง๋ค. ๋ง์ฝ ๊ทธ ํํ์์ด ํ๋กํผํฐ ์ ๊ทผ ํํ์์ด๋ฉด, ํธ์ถ ํํ์์ ๋ฉ์๋ ํธ์ถ์ด ๋๋ค. ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด ํจ์์ ๋ชธ์ฒด๊ฐ ์คํ๋๋ ๋์ ํ๋กํผํฐ ์ ๊ทผ ํํ์์ด ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ด ๋ชจ๋ this์ ๊ฐ์ด ๋๋ค. ์ด๋ ํจ์(๊ฐ์ฒด ์งํฅ์์๋ '๋ฉ์๋'๋ก ์๋ ค์ง)๊ฐ ์์ ์ด ์ํ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ๋์ํ๊ฒ ํ๋ฏ๋ก ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์๊ฒ ํ๋ค. ์ด์ ๊ด๋ จํด์๋ 9์ฅ์์ ์ข ๋ ์์ธํ ์ดํด๋ณด๊ฒ ๋ค.
๋ฉ์๋ ํธ์ถ์ด ์๋ ํธ์ถ ํํ์์ ๋ณดํต ์ ์ญ ๊ฐ์ฒด๋ฅผ this ํค์๋์ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ค. ํ์ง๋ง ECMAScript 5์์๋ ๋ฉ์๋ ํธ์ถ์ด ์๋ ํธ์ถ ํํ์์ '์๊ฒฉ ๋ชจ๋'์์ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ ์ญ ๊ฐ์ฒด ๋์ undefined๊ฐ this์ ๊ฐ์ด ๋๋ค. 5.7.3์์ '์๊ฒฉ ๋ชจ๋'์ ๋ํด ์์ธํ ์ดํด๋ณด๊ฒ ๋ค.
4.6 ๊ฐ์ฒด ์์ฑ ํํ์
๊ฐ์ฒด ์์ฑ ํํ์(object creation expression)์ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์์ฑ์๋ผ๊ณ ๋ถ๋ฅด๋ ํจ์๋ฅผ ํธ์ถํด ๊ฐ์ฒด์ ์ํ ํ๋กํผํฐ๋ค์ ์ด๊ธฐํํ๋ค. ๊ฐ์ฒด ์์ฑ ํํ์์ new ํค์๋๊ฐ ์์ ๋ถ๋๋ค๋ ์ ์ ์ ์ธํ๋ฉด ํธ์ถ ํํ์๊ณผ ์ ์ฌํ๋ค.
new Object() new Point(2,3)
๊ฐ์ฒด์ ์์ฑ์ ํจ์๋ฅผ ์ ๋ฌ์ธ์ ์์ด ํธ์ถํ ๋, ๋ค์๊ณผ ๊ฐ์ด ๊ดํธ๋ฅผ ์๋ตํ ์ ์๋ค.
new Object new Darte
๊ฐ์ฒด ์์ฑ ํํ์์ด ํ๊ฐ๋ ๋, ์๋ฐ์คํฌ๋ฆฝํธ ์ธํฐํ๋ฆฌํฐ๋ ๋จผ์ ์๋ก์ด ๋น ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ, ์ด๋ ์์ฑ๋ ๊ฐ์ฒด๋ ๊ฐ์ฒด ์ด๊ธฐ์ {}์ ์ํด ์์ฑ๋๋ ๊ฐ์ฒด์ ๋์ผํ๋ค. ๋ค์์ผ๋ก, ์ฃผ์ด์ง ์ธ์๋ค๊ณผ ํจ๊ป ์์ฑ์๋ฅผ ํธ์ถํ๋๋ฐ, ์ด๋ ๋ฐฉ๊ธ ์์ฑ๋ ์ ๊ฐ์ฒด๋ฅผ this ํค์๋์ ๊ฐ์ผ๋ก ์ค์ ํ์ฌ ์ ๋ฌํ๋ค. ์์ฑ์ ํจ์๋ ์ด this ํค์๋๋ฅผ ์ฌ์ฉํด ์๋ก ์์ฑ๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ค์ ์ด๊ธฐํํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ์์ฑ์๋ก ์ฌ์ฉ๋๋ ํจ์๋ ๊ฐ์ ๋ฐํํ์ง ์๋๋ค. ๊ฐ์ฒด ์์ฑ ํํ์์ ๊ฐ์ ์๋กญ๊ฒ ์์ฑ๋๊ณ ์ด๊ธฐํ๋ ๊ฐ์ฒด๋ค. ์์ฑ์๊ฐ ํน์ ๊ฐ์ฒด ๊ฐ์ ๋ฐํํ ๊ฒฝ์ฐ, ์ด ๊ฐ์ด ๊ฐ์ฒด ์์ฑ ํํ์์ ๊ฐ์ด ๋๊ณ ์์ฑ์๋ฅผ ํตํด ์๋ก ์์ฑ๋ ๊ฐ์ฒด๋ ๋ฒ๋ ค์ง๋ค. ์์ฑ์ ํจ์์ ๋ํ ์ข ๋ ์์ธํ ์ค๋ช ์ 9์ฅ์์ ๋ค๋ฃฌ๋ค.
4.7 ์ฐ์ฐ์ ๊ฐ์
์ฐ์ฐ์๋ ์์ ํํ์, ๋น๊ต ํํ์, ๋ ผ๋ฆฌ ํํ์, ํ ๋น ํํ์ ๋ฑ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ค์ํ๊ฒ ์ฐ์ธ๋ค. ํ 4-1์์๋ ๊ฐ ์ฐ์ฐ์๊ฐ ํ๋ ์ญํ ์ ์์ฝํ๊ณ ์ฐ์ ์์์์ผ๋ก ๋์ดํ์๋ค. ๋๋ถ๋ถ์ ์ฐ์ฐ์๊ฐ +์ = ๊ฐ์ ๋ถํธ๋ก ํํ๋์ง๋ง, ์ผ๋ถ๋ delete์ instanceof์ ๊ฐ์ด ํค์๋๋ก ํํํ๋ค. ํค์๋ ์ฐ์ฐ์๋ค๋ ๋ฌธ์ฅ ๋ถํธ ์ฐ์ฐ์๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๊ท ์ฐ์ฐ์์ธ๋ฐ, ๋ฌธ์ฅ ๋ถํธ ์ฐ์ฐ์์ ๋น๊ตํด ๋ ๊ฐ๊ฒฐํ ํํ๋ก ํํ๋ ๊ฒ๋ฟ์ด๋ค.
ํ 4-1์ ์ฐ์ฐ์๋ฅผ ์ฐ์ฐ ์ฐ์ ์์๋ก ์ ๋ ฌํ๋ค. ๋ชฉ๋ก์ ๋์ด๋ ์ฐ์ฐ์ ์ค์์ ๋จผ์ ๋์จ ์ฐ์ฐ์๊ฐ ๋์ค ๋์จ ์ฐ์ฐ์๋ณด๋ค ์ฐ์ฐ ์ฐ์ ์์๊ฐ ๋๋ค. ์ด์ฒ๋ผ, ์ฐ์ฐ์๋ ์ฐ์ ์์ ๋จ๊ณ์ ๋ฐ๋ผ ์ ์ผ๋ก ๊ตฌ๋ถ๋์ด ์๋ค. ํ์์ '๊ฒฐํฉ ๋ฐฉํฅ' ์ด์ ์ฐ์ฐ์ ๊ฒฐํฉ ๋ฐฉํฅ์ ๋ํ๋ด๋๋ฐ , L์ '์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก'๋ฅผ ์๋ฏธํ๊ณ R์ '์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก'๋ฅผ ๋ปํ๋ค. ๊ทธ๋ฆฌ๊ณ 'ํผ์ฐ์ฐ์ ๊ฐ์' ์ด์ ํด๋น ์ฐ์ฐ์๊ฐ ๊ฐ๋ ํผ์ฐ์ฐ์์ ๊ฐ์๋ฅผ ๋ปํ๋ค. 'ํผ์ฐ์ฐ์ ํ์ ' ์ด์ ์ฐ์ฐ์๊ฐ ์ฌ์ฉํ ํผ์ฐ์ฐ์๋ค์ ํ์ ์, '๋ฐํ' ์ด์ ์ฐ์ฐ์๊ฐ ํ๊ฐ๋ ํ ๋ฐํํ๋ ๊ฐ์ฒด ํ์ ์ ๋งํ๋ค. ์ด์ด์ง๋ ์ ์์๋ ํ 4-1์ ๋์ ์๋ ์ฐ์ฐ์๋ค์ ์ฐ์ฐ ์ฐ์ ์์์ ๊ฒฐํฉ ๋ฐฉํฅ ๊ทธ๋ฆฌ๊ณ ํผ์ฐ์ฐ์ ํ์ ์ ๋ํด ์ดํด๋ณผ ๊ฒ์ด๋ค. ๋ํ ์ฐ์ฐ์ ์์ฒด์ ๋ํด์๋ ์ดํด๋ณด๊ฒ ๋ค.
ํ 4-1 ์๋ฐ์คํฌ๋ฆฝํธ ์ฐ์ฐ์4.7.1 ํผ ์ฐ์ฐ์ ๊ฐ์
์ฐ์ฐ์์ ํ์ํ ํผ์ฐ์ฐ์์ ๊ฐ์์ ๋ฐ๋ผ ์ฐ์ฐ์๋ค์ ๋ถ๋ฅํ ์ ์๋ค. ๊ณฑ์ ์ฐ์ฐ์ * ์ฒ๋ผ ์๋ฐ์คํฌ๋ฆฝํธ ์ฐ์ฐ์ ๋๋ถ๋ถ์ 2ํญ ์ฐ์ฐ์(binary operator)๋ค. 2ํญ ์ฐ์ฐ์๋ ๋ ๊ฐ์ ํํ์์ ์กฐํฉํ์ฌ ํ๋์ ๋ณตํฉ ํํ์์ผ๋ก ๋ง๋ค์ด๋ธ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋จํญ ์ฐ์ฐ์(unary operator)๋ ์ง์ํ๋ค. ์ด๋ฐ ์ฐ์ฐ์๋ ํ๋์ ํํ์์ ์ข ๋ ๋ณต์กํ ๋จ์ผ ํํ์์ผ๋ก ๋ฐ๊พผ๋ค. ๊ฐ๋ น -x์ ๊ฐ์ ํํ์์์ - ์ฐ์ฐ์๋ ํผ์ฐ์ฐ์ x์ ๋ถํธ๋ฅผ ์ ํํ๋ค. ๋ง์ง๋ง์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ 3ํญ ์ฐ์ฐ์ (ternary operator )๋ ํ๋ ์ง์ํ๋๋ฐ, ๋ฐ๋ก ์กฐ๊ฑด๋ถ ์ฐ์ฐ์์ธ ?: ์ด๋ค. ์ด๋ ์ธ ํํ์๋ค์ ๊ฐ์ ์กฐํฉํด ํ๋์ ํํ์์ผ๋ก ๋ง๋ค์ด ๋ธ๋ค.
4.7.2 ํผ์ฐ์ฐ์์ ๋ฐํ ํ์
์ผ๋ถ ์ฐ์ฐ์๋ ๊ฐ์ ํ์ ๊ณผ ๋ฌด๊ดํ๊ฒ ๋์ํ์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์๋ ํผ์ฐ์ฐ์ ํ์ ์ด ์ ํด์ ธ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ์ฐ์๋ค์ ๋์ฒด๋ก ํน์ ํ์ ์ ๊ฐ์ ๋ฐํ(๋๋ ํ๊ฐ)ํ๋ค. ํ 4-1์ 'ํผ์ฐ์ฐ์ ํ์ ' ์ด์ ์ฐ์ฐ์๋ณ๋ก ํผ์ฐ์ฐ์ ํ์ ๊ณผ ํ๊ฐ ํ ๋ฐํ๋๋ ํ์ ์ ๋ณด์ฌ์ค๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ํ์ํ ๋๋ง๋ค ํผ์ฐ์ฐ์ ํ์ ์ ๋ณํํ๋ค(3.8์ ์ฐธ๊ณ ). ๊ณฑ์ ์ฐ์ฐ์ _๋ ๋ ๊ฐ์ ์ซ์ ํ์ ์ ํผ์ฐ์ฐ์๋ก ๊ฐ์ง๋ง, ํํ์ '3' _ '5'๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ ๊ฐ์ ํผ์ฐ์ฐ์๋ฅผ ์ซ์๋ก ๋ฐ๊พธ๊ธฐ ๋๋ฌธ์ ํน๋ณํ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
์ด ํํ์์ ๊ฐ์ ๋ฌธ์์ด '15'๊ฐ ์๋๋ผ ์ซ์ 15๋ค. ๋ํ, ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ชจ๋ ๊ฐ์ ์ฐธ์ด๋ ๊ฑฐ์ง์ผ๋ก ํ๊ฐ๋๋ค๋ ์ ์ ๊ธฐ์ตํ์. ๋ฐ๋ผ์ ๋ถ๋ฆฌ์ธ ๊ฐ์ ํผ์ฐ์ฐ์๋ก ๊ฐ๋ ์ฐ์ฐ์๋ ์ด๋ค ํ์ ์ ํผ์ฐ์ฐ์์๋ ๋ฌธ์ ์์ด ๋์ํ๋ค.
์ผ๋ถ ์ฐ์ฐ์๋ค์ ํผ์ฐ์ฐ์์ ํ์ ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์๋ํ๋ค. ๋ํ์ ์ผ๋ก + ์ฐ์ฐ์๋ ํผ์ฐ์ฐ์๊ฐ ์ซ์ ํ์ ์ด๋ฉด ๋ง์ ์ ํ์ง๋ง, ๋ฌธ์์ด ํ์ ์ด๋ฉด ๋ฌธ์์ด์ ์ด์ด๋ถ์ธ๋ค. ์ด์ ์ ์ฌํ๊ฒ, < ๊ฐ์ ๋น๊ต ์ฐ์ฐ์๋ค์ ํผ์ฐ์ฐ์ ํ์ ์ ๋ฐ๋ผ ์ซ์๋ ๋ฌธ์์ด ์ํ๋ฒณ ์์๋๋ก ๋น๊ต๋ฅผ ์ํํ๋ค. ๊ฐ ์ฐ์ฐ์์ ๋ช ์ธ๋ฅผ ๋ณด๋ฉด ํด๋น ์ฐ์ฐ์์ ํ์ ์ข ์์ฑ์ ์ด๋ค์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ค ํ์ ๋ณํ์ด ์ด๋ฃจ์ด์ง๋์ง ์ ์ ์๋ค.
4.7.3 ์ข๋ณ ๊ฐ
ํ 4-1 ใ ์ ํ ๋น ์ฐ์ฐ์๋ฅผ ๋น๋กฏํ ๋ช ๊ฐ์ง ์ฐ์ฐ์์ ํผ ์ฐ์ฐ์ ํ์ ์ '์ข๋ณ ๊ฐ(lvalue)'์ด๋ค. ์ข๋ณ ๊ฐ์ด๋ 'ํ ๋น ํํ์์ ์ข๋ณ์ ๋ํ๋ ์ ์๋ ํํ์'์์ ์ ๋ํ ์ฉ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋ณ์, ๊ฐ์ฒด ํ๋กํผํฐ, ๋ฐฐ์ด ์์๊ฐ ์ข๋ณ ๊ฐ์ด๋ค. EMCAScript ๋ช ์ธ์ ์ํ๋ฉด ๋ด์ฅ ํจ์๋ ์ข๋ณ ๊ฐ์ ๋ฐํํ ์ ์๋ค๊ณ ํ๋ค. ํ์ง๋ง ์ค์ ๋ก ์ด์ ๊ฐ์ ํํ๋ก ์ ์๋ ๋ด์ฅ ํจ์๋ ํ๋๋ ์๋ค.
4.7.4 ์ฐ์ฐ์ ๋ถ์ ํจ๊ณผ
2 * 3 ๊ณผ ๊ฐ์ ๊ฐ๋จํ ํํ์์ ํ๊ฐ ๊ฒฐ๊ณผ๋ ํ๋ก๊ทธ๋จ์ ์ํ์ ์ํฅ์ ๋ผ์น์ง ์์ผ๋ฉฐ, ํ๋ก๊ทธ๋จ์ด ๋ฏธ๋์ ์ํํ ์ด๋ค ๊ณ์ฐ์๋ ์ํฅ์ ๋ผ์น์ง ์๋๋ค. ํ์ง๋ง ์ผ๋ถ ํํ์์ ๋ถ์ ํจ๊ณผ (side effect)๋ฅผ ๊ฐ๋๋ค. ์ด๋ฌํ ํจ๊ณผ๋ ๋ฏธ๋์ ํ๊ฐ ๊ฒฐ๊ณผ์๋ ์ํฅ์ ๋ฏธ์น๊ฒ ๋๋ค. ํ ๋น ์ฐ์ฐ์๊ฐ ๋ํ์ ์ธ ๊ฒฝ์ฐ์ธ๋ฐ, ๋ณ์๋ ๊ฐ์ฒด์ ํ๋กํผํฐ์ ๊ฐ์ ํ ๋นํ๋ฉด ๊ทธ ๋ณ์๋ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ํํ์์ ๊ฐ์ด ๋ฐ๋๋ ๊ฒ์ด๋ค. ์ด์ ์ ์ฌํ๊ฒ ์ฆ๊ฐ ์ฐ์ฐ์ ++์ ๊ฐ์ ์ฐ์ฐ์ --๋ ์คํ๋๋ฉด ๊ธฐ์กด์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ฌต์์ ํ ๋น์ด ์ด๋ฃจ์ด์ง๋ค. delete ์ฐ์ฐ์๋ ๋ถ์ ํจ๊ณผ๊ฐ ์๋๋ฐ, ํ๋กํผํฐ๋ฅผ ์ญ์ ํ๋ ๊ฒ์ ํด๋น ํ๋กํผํฐ์ undefined ๊ฐ์ ํ ๋นํ๋ ๊ฒ๊ณผ ์ ์ฌํ๋ค(ํ์ง๋ง ๋๊ฐ์ง๋ ์๋ค).
๋ค๋ฅธ ์๋ฐ์คํฌ๋ฆฝํธ ์ฐ์ฐ์๋ ๋ถ์ ํจ๊ณผ๊ฐ ์๋ค. ํ์ง๋ง ํจ์ ๋๋ ์์ฑ์ ๋ชธ์ฒด์ ๋ถ์ ํจ๊ณผ๊ฐ ์๋ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ํจ์ ํธ์ถ ๋๋ ๊ฐ์ฒด ์์ฑ ํํ์์์๋ ๋ถ์ ํจ๊ณผ๊ฐ ๋ํ๋ ์ ์๋ค.
4.7.5 ์ฐ์ฐ์ ์ฐ์ ์์ ํ 4-1์ ๋์ดํ ์ฐ์ฐ์๋ค์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ์ฐ์ฐ์๋ถํฐ ์ฐ์ ์์๊ฐ ๋ฎ์ ์ฐ์ฐ์ ์๋ก ์ ๋ ฌ๋์ด ์๋ค. ์ฐ์ ์์๊ฐ ๊ฐ์ ์ฐ์๋ค๋ผ๋ฆฌ๋ ์ ์ผ๋ก ๊ตฌ๋ถํ์๋ค. ์ฐ์ฐ์ ์ฐ์ ์์๋ ์ฐ์ฐ์ด ์ํ๋๋ ์์๋ฅผ ์ ์ดํ๋ ๊ธฐ์ค์ด ๋๋ค. ์ฐ์ ์์๊ฐ ๋์ ์ฐ์ฐ์๋ ์๋์ ์ผ๋ก ์ฐ์ ์์๊ฐ ๋ฎ์ ์ฐ์ฐ์๋ณด๋ค ๋จผ์ ์ํ๋๋ค. ๋ค์ ํํ์์ ์ดํด๋ณด์.
w = x + y*z;
๊ณฑ์ ์ฐ์ฐ์ *๋ ๋ง์ ์ฐ์ฐ์ +๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๋ค. ๋ฐ๋ผ์ ๊ณฑ์ ์ด ๋ง์ ๋ณด๋ค ๋จผ์ ์ํ๋๋ค. ๋ํ ํ ๋น ์ฐ์ฐ์ =๋ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋ฎ๊ธฐ ๋๋ฌธ์ ์ค๋ฅธ์ชฝ์ ๋ชจ๋ ์ฐ์ฐ์ด ์๋ฃ๋ ํ์์ผ ํ ๋น ์ฐ์ฐ์ด ์ํ๋๋ค. ์๋ ์ ํด์ง ์ฐ์ฐ์ ์ฐ์ ์์๋ฅผ ๋ฐ๊พธ๋ ค๋ฉด ๋ช ์์ ์ผ๋ก ๊ดํธ๋ฅผ ์ฐ๋ฉด ๋๋ค. ์์ ์์์ ๊ฐ์ ๋ก ๋ง์ ์ ๋จผ์ ์ํํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ฉด ๋๋ค.
w = ( x + y ) * z;
์ฐธ๊ณ ๋ก, ํ๋กํผํฐ ์ ๊ทผ์ด๋ ํธ์ถ ํํ์์ ํ 4-1์ ๋์ด๋ ์ฐ์ฐ์๋ค๋ณด๋ค ํญ์ ์ฐ์ ์์๊ฐ ๋๋ค. ๋ค์ ํํ์์ ์ดํด๋ณด์.
typeof my.functionsx
๋น๋ก typeof ์ฐ์ฐ์๊ฐ ์ฐ์ ์์๊ฐ ๋์ ์ฐ์ฐ์ ์ค ํ๋์ง๋ง, ํ๋กํผํฐ ์ ๊ทผ๊ณผ ํจ์ ํธ์ถ์ด ๋๋ ํ์์ผ ์คํ๋๋ค. ์ค์ ์์ ์ด๋ค ์ฐ์ฐ์ด ์ฐ์ ํ๋์ง ํ์ ์ด ์์ง ์๋๋ค๋ฉด, ๊ฐ์ฅ ๊ฐ๋จํ ํด๊ฒฐ์ฑ ์ ๊ดํธ๋ฅผ ์ฌ์ฉํด ์ฐ์ฐ ์์๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ๋ ๊ฒ์ด๋ค. ๋จ, ํ ๊ฐ์ง ์์๋ ์ค์ํ ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค. ๊ณฑ์ ๊ณผ ๋๋์ ์ ๋ง์ ๊ณผ ๋บ์ ๋ณด๋ค ๋จผ์ ์ํ๋๋ฉฐ, ํ ๋น์ ์ฐ์ ์์๊ฐ ์์ฃผ ๋ฎ๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ง์ง๋ง์ผ๋ก ์ํ๋๋ค๋ ์ ์ด๋ค.
4.7.6 ์ฐ์ฐ์ ๊ฒฐํฉ ๋ฐฉํฅ
ํ 4-1์์ 'A' ๋ผ๊ณ ํ์๋ ์ด์ ์ฐ์ฐ์ '๊ฒฐํฉ ๋ฐฉํฅ(associativity)'์ ์ง์ ํ๋ค๊ณ ์ค๋ช ํ๋ค. L์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก์ ๊ฒฐํฉ ๋ฐฉํฅ์, R์ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก์ ๊ฒฐํฉ ๋ฐฉํฅ์ ๋ํ๋ธ๋ค. ์ฐ์ฐ์ ๊ฒฐํฉ ๋ฐฉํฅ์ด ์ง์ ํ๋ ๊ฒ์ ๋์ผ ์ฐ์ ์์ ์ฐ์ฐ๋ค ๊ฐ์ ์ํ ์์๋ฅผ ์๋ฏธํ๋ค. ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก์ ๊ฒฐํฉ ๋ฐฉํฅ์ ์ฐ์ฐ์ด ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ผ์ด๋๋ค๋ ์๋ฏธ๋ค. ์๋ฅผ ๋ค์ด ๋บ์ ์ฐ์ฐ์๋ ๊ฒฐํฉ ๋ฐฉํฅ์ด ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ(L)์ด๊ธฐ ๋๋ฌธ์,
w = x - y - z;
์ด ํํ์์ ๋ค์๊ณผ ๋์ผํ๋ค.
w = (( x - y) - z );
๋ฐ๋ฉด, ๋ค์์ ํํ์๋ค์,
x = ~-y; w = x = y = z; q = q?b:c?d:e?f:g;
๋ค์ ํํ์๋ค๊ณผ ๊ฐ๊ฐ ๋์ผํ๋ค.
x = ~(-y); w = ( x = ( y = z)); q = a?b:*c?d:(e?f:g));
์ด๋ ๊ฒ ๋๋ ์ด์ ๋ ๋จํญ, ํ ๋น, 3ํญ ๋น๊ต ์ฐ์ฐ์๋ค์ ๊ฒฐํฉ ๋ฐฉํฅ์ด ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ(R)์ด๊ธฐ ๋๋ฌธ์ด๋ค.
4.7.7 ํ๊ฐ ์์
์ฐ์ฐ์ ์ฐ์ ์์์ ๊ฒฐํฉ ๋ฐฉํฅ์ ๋ณต์กํ ํํ์์์ ์ด๋ค ์ฐ์ฐ์ด ์ฐ์ ์ ์ผ๋ก ์ํ๋๋์ง๋ฅผ(order of evaluation) ๊ฒฐ์ ํ๋ค. ํ์ง๋ง ์ด๋ค ๋ถ ํํ์(sub-expression)์ด ๋จผ์ ํ๊ฐ๋๋์ง๋ฅผ ์ ํ์ง๋ ์๋๋ค. ์๋ฅผ ๋ค์ด ํํ์ w=x+y*z์ ๊ฒฝ์ฐ, ๋ถ ํํ์ w๊ฐ ๋จผ์ ํ๊ฐ๋๊ณ , x,y,z๊ฐ ์ฐจ๋ก๋๋ก ํ๊ฐ๋๋ค. ๊ทธ ํ์ y์ z๋ฅผ ๊ณฑํ ํ, x ๊ฐ์ ๋ํด์ ํํ์ w๊ฐ ๊ฐ๋ฆฌํค๋ ๋ณ์๋ ๊ฐ์ฒด ํ๋กํผํฐ๋ก ๊ฐ์ ํ ๋นํ๋ค. ํํ์์ ๊ดํธ๋ฅผ ์ถ๊ฐํ๋ฉด ๊ณฑ์ , ๋ง์ , ํ ๋น ์ฌ์ด์ ์์๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. ํ์ง๋ง ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก์ ํ๊ฐ ์์๊น์ง ๋ฐ๊ฟ ์๋ ์๋ค.
ํ๊ฐ ์์๋, ํํ์ ๊ฐ์ด๋ฐ์ ๋ค๋ฅธ ํํ์์ ๊ฐ์ ์ํฅ์ ๋ผ์น๋ ํํ์์ด ํฌํจ๋ ๊ฒฝ์ฐ์๋ง ์ค์ํ๋ค. ๋ง์ฝ์ ํํ์ x๊ฐ z์์ ์ฌ์ฉํ๊ณ ์๋ ์์์ ๋ณ์ ๊ฐ์ ์ฆ๊ฐ์ํจ๋ค๊ณ ํ ๋, ์ฌ๊ธฐ์ ์ค์ํ ์ ์ x๊ฐ ๋ฐ๋์ z๋ณด๋ค ๋จผ์ ํ๊ฐ๋์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
4.8 ์ฐ์ ํํ์
์ด๋ฒ ์ ์๋ ํผ์ฐ์ฐ์๋ค์ ์ฐ์ ์ฐ์ฐ์ด๋ ๊ธฐํ ์์น ์กฐ์์ ํ๋ ์ฐ์ฐ์์ ๋ํด ๋ค๋ฃฌ๋ค. ๊ณฑ์ , ๋๋์ , ๋บ์ ์ฐ์ฐ์๋ ๋งค์ฐ ์ง๊ด์ ์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ฐ์ฐ์๋ณด๋ค ๋จผ์ ๋ค๋ฃจ๊ฒ ๋ค. ๋ง์ ์ฐ์ฐ์๋ ๋จ์ํ ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ๋ง์ ์ฐ์ฐ๋ฟ ์๋๋ผ ๋ฌธ์์ด์ ์ด์ด๋ถ์ผ ์๋ ์๊ณ , ํผ์ฐ์ฐ์์ ํ์ ์ ๋ฐ๊ฟ ์๋ ์์ด์ ๋ณ๋์ ์ ์์ ์์ธํ ๋ค๋ฃฐ ๊ฒ์ด๋ค. ๋จํญ ์ฐ์ฐ์์ ๋นํธ ์ฐ์ฐ์ ๋ํ ์ธ๋ถ ์ ์์ ์ดํด๋ณด๊ฒ ๋ค.
๊ธฐ๋ณธ ์ฐ์ ์ฐ์ฐ์๋ *(๊ณฑ์ ), /(๋๋์ ), %(๋๋จธ์ง), +(๋ง์ ), -(๋บ์ )์ด๋ค. ์์์ ์ธ๊ธํ๋ฏ์ด, + ์ฐ์ฐ์๋ ๋ณ๋์ ์ ์์ ์ดํด๋ณด๊ฒ ๋ค. ๋ค๋ฅธ ๋ค๊ฐ์ง ๊ธฐ๋ณธ ์ฐ์ ์ฐ์ฐ์๋ ๋จ์ํ ๊ฐ๊ฐ์ ํผ์ฐ์ฐ์๋ฅผ ํ๊ฐํ๊ณ , ๊ฐ์ ์ซ์๋ก ๋ณํํ๋ค. ๊ทธ ๋ค์์ ํผ์ฐ์ฐ์๋ค์ ์ต์ข ๊ฐ์ผ๋ก ๊ณฑ์ , ๋๋์ , ๋๋จธ์ง, ๋บ์ ์ฐ์ฐ์ ์ํํ๋ค. ์๋ก ๋ณํ ๋ถ๊ฐ๋ฅํ ํผ์ฐ์ฐ์๋ NaN ๊ฐ์ผ๋ก ๋ณํ๋๋ฉฐ, ํผ ์ฐ์ฐ์ ์ค ํ๋๋ผ๋ NaN์ผ ๊ฒฝ์ฐ์๋ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ NaN์ด๋ค.
/์ฐ์ฐ์๋ ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์๋ฅผ ๋ ๋ฒ์งธ ํผ์ฐ์ฐ์๋ก ๋๋๋ค. ์ฌ๋ฌ๋ถ์ด ์ ์์ ๋ถ๋์์์ ์ซ์๋ฅผ ๊ตฌ๋ถํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ต์ํ๋ค๋ฉด, ์ ์๋ฅผ ์ ์๋ก ๋๋๋ฉด ๊ณ์ฐ ๊ฐ์ด ๋น์ฐํ ์ ์๊ฐ ๋๋ฆฌ๋ผ๊ณ ์์ํ ๊ฒ์ด๋ค. ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ชจ๋ ์ซ์๋ ๋ถ๋์์์ ์ซ์๋ก ์ทจ๊ธ๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ๋๋์ ์ฐ์ฐ์ ๊ฒฐ๊ณผ ๋ํ ๋ถ๋์์์ ์ซ์ ๊ฐ์ด ๋๋ค. ์๋ฅผ ๋ค์ด 5.2๋ 2๊ฐ ์๋๋ผ 2.5๋ก ํ๊ฐ๋๋ค. ๊ฐ์ 0์ผ๋ก ๋๋๋ฉด ์์ ๋ฌดํ๋ ๋๋ ์์ ๋ฌดํ๋ ๊ฐ์ด ๋๊ณ , 0/0์ ๊ฐ์ NaN๋ก ํ๊ฐ๋๋ค. ์ด๋ค ์ค ์ด๋ ํ ๊ฒฝ์ฐ๋ผ๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
% ์ฐ์ฐ์๋ ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์์ ๋ํ ๋ ๋ฒ์งธ ํผ์ฐ์ฐ์์ ๋๋จธ์ง ์ฐ์ฐ์ ์ํํ๋ค. ๋ค์ ๋งํ๋ฉด ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์๋ฅผ ๋ ๋ฒ์งธ ํผ์ฐ์ฐ์๋ก ๋๋๊ณ ๋จ์ ๋๋จธ์ง๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ์ด๋ค. ๊ฒฐ๊ณผ์ ๋ถํธ๋ ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์์ ๋ถํธ์ ๋์ผํ๋ค. ์๋ฅผ ๋ค์ด, 5 % 2์ ๊ฒฐ๊ณผ๋ 1์ด๊ณ , -5 % 2์ ๊ฒฐ๊ณผ๋ -1์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋๋จธ์ง ์ฐ์ฐ์๋ ์ ์ ํ์ ์ ํผ์ฐ์ฐ์์ ๋ํด ์ฌ์ฉ๋์ง๋ง, ๋ถ๋์์์ ๊ฐ์ ๋ํด์๋ ์ ์ฉํ ์ ์๋ค. ์๋ฅผ ๋ค์ด 6.5 % 2.1 ์ ๊ฒฐ๊ณผ๋ 0.2 ์ด๋ค.
4.8.1 ๋ง์ ์ฐ์ฐ์ +
- ์ฐ์ฐ์๊ฐ ์ดํญ ์ฐ์ฐ์๋ก ์ฌ์ฉ๋ ๋๋ ํผ ์ฐ์ฐ์ ์ซ์ ๊ฐ์ ๋ํ๊ฑฐ๋ ํผ์ฐ์ฐ์ ๋ฌธ์์ด์ ์ด์ด ๋ถ์ธ๋ค.
1 + 2 // => '3' "hello" + " " + "there: // => 'hello there' "1" + "2" // => '12'
๋ ํผ์ฐ์ฐ์ ๊ฐ์ด ๋ชจ๋ ์ซ์๊ฑฐ๋ ๋ฌธ์์ด์ธ ๊ฒฝ์ฐ์๋ + ์ฐ์ฐ์๊ฐ ํ๋ ์ผ์ด ๋ช ํํ๋ค. ํ์ง๋ง ์ด ์ธ์ ๊ฒฝ์ฐ์๋ ํ์ ๋ณํ์ด ์ด๋ฃจ์ด์ ธ์ผ ํ๊ณ , ์ฐ์ฐ์ ํ์ ๋ณํ์ด ์ด๋ฃจ์ด์ง ํ์ ์ํ๋๋ค. + ์ฐ์ฐ์๋ ํ์ ๋ณํ ์์ ๋ฌธ์์ด ์ด์ด๋ถ์ด๊ธฐ๋ฅผ ๋จผ์ ์ํํ๋ค. ๋ง์ผ ํผ์ฐ์ฐ์ ์ค ํ๋๊ฐ ๋ฌธ์์ด์ด๊ฑฐ๋ ๋ฌธ์์ด๋ก ๋ฐ๊ฟ ์ ์๋ ๊ฐ์ฒด๋ผ๋ฉด ๋ค๋ฅธ ํผ์ฐ์ฐ์๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ ํ ๋ ๋ฌธ์์ด์ ์ด์ด ๋ถ์ธ๋ค. ๋ง์ ์ ๋ ํผ์ฐ์ฐ์ ๊ฐ์ด ๋ชจ๋ ๋ฌธ์์ด์ด ์๋๊ฑฐ๋ ๋ฌธ์์ด๋ก ๋ณํ๋ ์ ์์ ๋๋ง ์ํ๋๋ค. ๊ธฐ์ ์ ์ผ๋ก + ์ฐ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ํ๋ค.
โข ๋ง์ผ ํ๋์ ํผ์ฐ์ฐ์ ๊ฐ์ด ๊ฐ์ฒด๋ผ๋ฉด, 3.8.3 ์์ ์ค๋ช
ํ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด ๊ฐ์ฒด๋ฅผ ์์ ํ์
์ผ๋ก ๋ฐ๊พผ๋ค. Date ๊ฐ์ฒด๋ toString() ๋ฉ์๋์ ์ํด ๋ฌธ์์ด๋ก ๋ฐ๋๊ณ , ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ valueOf() ๋ฉ์๋๊ฐ ์์ ํ์
์ ๊ฐ์ ๋ฐํ ํ๋ ๊ฒฝ์ฐ ๊ทธ ๋ฐํ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ์ด์ฒ๋ผ ์ ์ฉํ valueOf() ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์ผ๋ฏ๋ก, ๊ทธ ๋์ toString() ๋ฉ์๋๋ฅผ ํตํด ๋ณํ๋๋ค.
โข ํผ์ฐ์ฐ์๊ฐ ๊ฐ์ฒด์์ ์์ ํ์
์ผ๋ก ๋ณํ๋ ํ, ๋ง์ผ ์ด๋ค ํผ์ฐ์ฐ์๋ผ๋ ๋ฌธ์์ด์ด๋ฉด, ๋ค๋ฅธ ํผ์ฐ์ฐ์๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ ํ ๋ ๋ฌธ์์ด์ ์ด์ด ๋ถ์ธ๋ค.
โข ์ด ์ธ์ ๊ฒฝ์ฐ์๋ ๋ ํผ์ฐ์ฐ์๊ฐ ์ซ์(๋๋ NaN)๋ก ๋ณํ๋๊ณ ๋ง์
์ฐ์ฐ์ด ์ํ๋๋ค.๋ช ๊ฐ์ง ์๋ฅผ ์ดํด๋ณด์.
1 + 2 // => 3: ๋ง์ "1" + "2" // => '12': ์ด์ด๋ถ์ด๊ธฐ "1" + 2 // => '12': ์ซ์๋ฅผ ๋ฌธ์์ด๋ก ๋ฐ๊พผ ํ ์ด์ด๋ถ์ด๊ธฐ 1 + { ? } // => "1[object Object]" : ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ฐ๊พผ ํ ์ด์ด๋ถ์ด๊ธฐ true + true // => 2: ๋ถ๋ฆฌ์ธ ๊ฐ์ ์ซ์๋ก ๋ฐ๊พผ ํ ๋ํ๊ธฐ 2 + null // => 2: null ๊ฐ์ 0์ผ๋ก ๋ฐ๊พผ ํ ๋ํ๊ธฐ 2 + undefined // => NaN: undefined๋ฅผ NaN์ผ๋ก ๋ฐ๊พผ ํ ๋ํ๊ธฐ
๋ง์ง๋ง์ผ๋ก, + ์ฐ์ฐ์๋ ์ฌ๋ฌ ๋ฌธ์์ด๊ณผ ์ฌ๋ฌ ์ซ์๋ฅผ ํจ๊ป ์ฌ์ฉํ ๋๋ ์ฐ์ฐ์ ๊ฒฐํฉ ๋ฒ์น์ด ์ ์ฉ๋์ง ์๋๋ค๋ ์ ์ ๋ฐ๋์ ๊ธฐ์ตํด์ผ ํ๋ค. ๋ค์ ๋งํด, ์ฐ์ฐ์๊ฐ ์คํ๋ ์์์ ๋ฐ๋ผ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค๋ ์๋ฏธ๋ค. ์๋ฅผ ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ๋ค.
1 + 2 + " blind mice "; // => '3 blind mice ' 1 + ( 2 + " blind mice"); // => '12 blind mice'
1ํ์ ๊ดํธ๊ฐ ์๊ธฐ ๋๋ฌธ์ + ์ฐ์ฐ์๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฒฐํฉ๋๋ค. ๋ฐ๋ผ์ ๋ ์ซ์๊ฐ ๋จผ์ ๊ณ์ฐ๋๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ฐ๊พผ ํ ๋จ์ ๋ฌธ์์ด์ ์ด์ด๋ถ์ธ๋ค. 2ํ์์๋ ๊ดํธ๊ฐ ์ฐ์ฐ์ ์์๋ฅผ ๋ฐ๊พผ๋ค. ์ซ์ 2๊ฐ ๋ฌธ์์ด๋ก ๋ฐ๋์ด ๋ฌธ์์ด๊ณผ ํ๋๋ก ํฉ์ณ์ง๋ค. ๊ทธ ๋ค์์ ์ซ์ 1์ ๋ฌธ์์ด๋ก ๋ฐ๊พผ ํ ๋จ์ ๋ฌธ์์ด์ ์ด์ด๋ถ์ธ๋ค.
4.8.2 ๋จํญ ์ฐ์ ์ฐ์ฐ์
๋จํญ ์ฐ์ฐ์๋ ํ๋์ ํผ์ฐ์ฐ์ ๊ฐ์ ์์ ํด์ ์ ๊ฐ์ผ๋ก ๋ง๋ ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋จํญ ์ฐ์ฐ์๊ฐ ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋๊ณ , ๊ฒฐํฉ ๋ฐฉํฅ์ ๋ชจ๋ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ด๋ค. ์ด๋ฒ ์ ์์ ์ค๋ช ํ๋ ์ฐ์ ๋จํญ ์ฐ์ฐ์ (+, -, ++, --)๋ ํ๋์ ํผ์ฐ์ฐ์๋ฅผ ๊ฐ๋ฅํ ํ ์ซ์ ํ์ ์ผ๋ก ๋ณํํ๋ ค ์๋ํ๋ค. ๋๋ํ(!) ๋ฌธ์์ +, =๋ ๋จํญ๊ณผ ์ดํญ ์ฐ์ฐ์ ์์ชฝ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ๋จํญ ์ฐ์ ์ฐ์ฐ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
๋จํญ ๋ง์ (+)
๋จํญ ๋ง์ ์ฐ์ฐ์๋ ํผ์ฐ์ฐ์๋ฅผ ์ซ์(๋๋ NaN)๋ก ๋ฐ๊พผ ํ ๊ฐ์ ๋ฐํํ๋ค. ๋ง์ผ ํผ์ฐ์ฐ์๊ฐ ์ซ์์ธ ๊ฒฝ์ฐ์๋ ์๋ฌด ์ผ๋ ํ์ง ์๋๋ค.
๋จํญ ๋บ์ (-)
๋บ์ ์ฐ์ฐ์๊ฐ ๋จํญ ์ฐ์ฐ์๋ก ์ฌ์ฉ๋ ๋๋, ํผ์ฐ์ฐ์๋ฅผ ๊ฐ๋ฅํ๋ฉด ์ซ์๋ก ๋ณํํ๋ ค๊ณ ์๋ํ๊ณ , ์ฑ๊ณตํ ๊ฒฝ์ฐ์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ถํธ๋ฅผ ๋ฐ๊พผ๋ค.
์ฆ๊ฐ(++)
++ ์ฐ์ฐ์๋ ๋จํญ ํผ์ฐ์ฐ์์ ๋ํด ์ฆ๊ฐ ์ฐ์ฐ์ ํ๋ค(์ฆ, 1์ ๋ํ๋ค). ์ด๋ ํผ์ฐ์ฐ์๋ ๋ฐ๋์ ์ข๋ณ ๊ฐ(๋ณ์, ๋ฐฐ์ด ์์ ๋๋ ๊ฐ์ฒด ํ๋กํผํฐ ์ค ํ๋)์ด์ด์ผ ํ๋ค. ์ด๋ฌํ ๋ณ์, ์์, ํ๋กํผํฐ๊ฐ ์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ ++ ์ฐ์ฐ์๋ ์ผ๋จ ์ด๋ฅผ ์ซ์ ํ์ ์ผ๋ก ๋ณํํ๊ณ , ๊ฑฐ๊ธฐ 1์ ๋ํ ๋ค์, ์๋ ๋ณ์๋ ์์, ํ๋กํผํฐ์ ๋์ ํ๋ค.
์ด ์ฐ์ฐ์์ ๊ฒฐ๊ณผ ๊ฐ์ ํผ์ฐ์ฐ์์ ์ด๋์ชฝ์ ์ฐ์ฐ์๊ฐ ์์นํด ์๋์ง์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ํผ์ฐ์ฐ์์ ์์์ ์ฌ์ฉ๋ ๊ฒฝ์ฐ์๋ ์ ์น์ฆ๊ฐ(pre-increment) ์ฐ์ฐ์๋ผ๊ณ ํ๋ฉฐ, ๋จผ์ ํผ์ฐ์ฐ์๋ฅผ ์ฆ๊ฐ์ํจ ๋ค์ ์ฆ๊ฐ๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ก ๋ด๋๋๋ค. ํผ์ฐ์ฐ์์ ๋ค์์ ์ฌ์ฉ๋ ๊ฒฝ์ฐ ํ์น์ฆ๊ฐ(post-increment) ์ฐ์ฐ์๋ผ๊ณ ํ๋ฉฐ, ๋ง์ฐฌ๊ฐ์ง๋ก ํผ์ฐ์ฐ์๋ฅผ ์ฆ๊ฐ์ํค์ง๋ง ๊ฒฐ๊ณผ๋ก๋ ์๋์ ์ฆ๊ฐ๋์ง ์์ ๊ฐ์ ๋ด๋๋๋ค. ๋ค์ ๋ ์ฝ๋ ์ฌ์ด์ ์ฐจ์ด์ ์ ์ดํด๋ณด์.
var i = 1, j = ++i; // i์ j ๋ชจ๋ 2์ด๋ค. var i = 1, j = i++; // i๋ 2์ด๊ณ , j๋ 1์ด๋ค.
ํํ์ ++x๋ x=x+1๊ณผ ํญ์ ๊ฐ์ง ์์์ ๋ช ์ฌํ์. ++ ์ฐ์ฐ์๋ ์ ๋ ๋ฌธ์์ด ๊ฒฐํฉ ์ฐ์ฐ์ ํ์ง ์๊ณ , ํญ์ ํผ์ฐ์ฐ์๋ฅผ ์ซ์๋ก ๋ฐ๊พผ ํ์ ๊ฐ์ ํ๋ ์ฆ๊ฐ์ํจ๋ค. ์๋ฅผ ๋ค์ด, x๊ฐ ๋ฌธ์์ด "1"์ด๋ฉด ++x๋ ์ซ์ 2๊ฐ ๋์ง๋ง x+1์ ๋ฌธ์์ด"11"์ด ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์๋ ์ธ๋ฏธ์ฝ๋ก ์ฝ์ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์, ํ์น์ฆ๊ฐ ์ฐ์ฐ์์ ๊ทธ ์์ ์๋ ํผ์ฐ์ฐ์ ์ฌ์ด์์ ์ค๋ฐ๊ฟ์ ํด์๋ ์ ๋๋ค. ๋ง์ผ ์ด๋ด ๊ฒฝ์ฐ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ด ํผ์ฐ์ฐ์ ์์ฒด๋ฅผ ํ๋์ ํํ์์ผ๋ก ์ทจ๊ธํ๊ฒ ๋์ด ์ฐ์ฐ์ ์์ ์ธ๋ฏธ์ฝ๋ก ์ ์ฝ์ ํ ๊ฒ์ด๋ค. ์ด ์ฐ์ฐ์๋ ์ ์น ๋ฐ ํ์น ํํ๋ก ์ฌ์ฉํ ์ ์๊ณ , ์ผ๋ฐ์ ์ผ๋ก for ๋ฃจํ์ ์ ์ด ์นด์ดํฐ๋ฅผ ์ฆ๊ฐ์ํค๋ ๋ฐ ๋ง์ด ์ฐ์ธ๋ค(5.5.3 ์ฐธ๊ณ ).
๊ฐ์(--)
-- ์ฐ์ฐ์ ์ญ์ ++ ์ฐ์ฐ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ข๋ณ ๊ฐ(๋ณ์, ๋ฐฐ์ด ์์ ๋๋ ๊ฐ์ฒด ํ๋กํผํฐ ์ค ํ๋)์ ํผ์ฐ์ฐ์๋ก ๊ฐ๋๋ค. -- ์ฐ์ฐ์๋ ๋จํญ ํผ์ฐ์ฐ์์ ๊ฐ์ ์ซ์๋ก ๋ฐ๊พผ ํ์ 1์ ๋บ๋ค. ๊ทธ ๋ค์์ ๊ฐ์ํ ๊ฐ์ ํผ์ฐ์ฐ์์ ๋ค์ ํ ๋นํ๋ค. ++ ์ฐ์ฐ์์ ๋ง์ฐฌ๊ฐ์ง๋ก -- ์ฐ์ฐ์ ์ญ์, ์ฐ์ฐ์๊ฐ ์ด๋ ์ชฝ์ ์์นํด ์๋์ง์ ๋ฐ๋ผ ๊ฒฐ๊ณผ ๊ฐ์ด ๋ฌ๋ผ์ง๋ค. ๋ง์ฝ ํผ์ฐ์ฐ์ ์์ ์์ผ๋ฉด ํผ์ฐ์ฐ์์ ๊ฐ์ ๊ฐ์์ํค๊ณ , ๊ฐ์์ํจ ๊ฐ์ ๋ฐํํ๋ค. ๋ง์ผ ํผ์ฐ์ฐ์ ๋ค์ ์์ผ๋ฉด, ํผ์ฐ์ฐ์์ ๊ฐ์ ๊ฐ์์ํค์ง๋ง ๊ฐ์์ํค๊ธฐ ์ ๊ฐ์ ๋ฐํํ๋ค. ++ ์ฐ์ฐ์์์์ ๊ฐ์ ์ด์ ๋ก ์ฐ์ฐ์๊ฐ ํ์น ๊ฐ์ ์ฐ์ฐ์๋ก ์ฌ์ฉ๋ ๋๋ ์ฐ์ฐ์์ ํผ์ฐ์ฐ์ ์ฌ์ด์ ์ค๋ฐ๊ฟ์ด ์์ด์๋ ์ ๋๋ค.
4.8.3 ๋นํธ ๋จ์ ์ฐ์ฐ์
๋นํธ ๋จ์ ์ฐ์ฐ์๋ค์ 2์ง์๋ฅผ ์ ์์ค์์ ์กฐ์ํ๋ ๋ฐ ์ฌ์ฉํ๋ค. ์ฌ์น์ฐ์ฐ๊ณผ ๊ฐ์ ์ฐ์ ์ฐ์ฐ์ ์ํํ์ง๋ ์์ง๋ง, ํผ์ฐ์ฐ์๋ก ์ซ์ ๊ฐ์ ์ฌ์ฉํ๊ณ ์ต์ข ์ ์ผ๋ก ์ซ์ ๊ฐ์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ฐ์ ์ฐ์ฐ์๋ก ๋ถ๋ฅ๋์ด ์๋ค. ์ด๋ฌํ ์ฐ์ฐ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ผ๋ฐ์ ์ผ๋ก ๋๋ฆฌ ์ฐ์ด์ง ์๋๋ค. ๋ง์ผ ์ฌ๋ฌ๋ถ์ด 10์ง์ ์ ์๋ฅผ 2์ง์๋ก ํํํ๋ ๊ฒ์ ์ต์ํ์ง ์๋ค๋ฉด ์ด๋ฒ ์ ์์ ์ค๋ช ํ๋ ์ฐ์ฐ์๋ค์ ๊ฑด๋๋ฐ์ด๋ ์ข๋ค. ๋นํธ ๋จ์ ์ฐ์ฐ์ ์ค ๋ค ์ข ๋ฅ(&, |, ^, ~)๋ ํผ์ฐ์ฐ์์ ๊ฐ๋ณ ๋นํธ์ ๋ํด ๋ถ๋ฆฌ์ธ ๋์(Boolean Algebra)๋ฅผ ์ํํ๋ค. ์ด๋ ํผ์ฐ์ฐ์์ ๊ฐ๋ณ ๋นํธ๋ ๋ถ๋ฆฌ์ธ ๊ฐ์ผ๋ก ์ทจ๊ธ๋๋ค( 1 = true, 0 = false). ๋ค๋ฅธ ์ธ ์ข ๋ฅ์ ๋นํธ ๋จ์ ์ฐ์ฐ์(<<, >>, >>>)๋ ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ผ๋ก ๋นํธ๋ฅผ ์ด๋ํ ๋ ์ฌ์ฉ๋๋ค.
๋นํธ ๋จ์ ์ฐ์ฐ์์ ํผ์ฐ์ฐ์๋ก๋ ์ ์๊ฐ ์จ๋ค. ์ฌ๊ธฐ์ ์ ์๋ 64๋นํธ ๋ถ๋ ์์์ ํํ๋ฒ์ด ์๋๋ผ 32๋นํธ ์ ์ ํํ๋ฒ์ ๋ฐ๋ฅธ๋ค. ๋นํธ ๋จ์ ์ฐ์ฐ์๋ ํผ์ฐ์ฐ์์ ๊ฐ์ ๊ฐ๋ฅํ๋ฉด ์ซ์๋ก ๋ฐ๊พธ๊ณ , 32๋ฒ์งธ ์ดํ ๋นํธ๋ฅผ ์๋ผ๋ด์ด ๊ฐ์ ๋ก ํผ์ฐ์ฐ์ ๊ฐ์ 32๋นํธ๋ก ๋ง๋ ๋ค. ์ด๋ ์ฐ์ฐ์(shift operator)์ ์ฐ์ธก ํผ์ฐ์ฐ์๋ 0๊ณผ 31 ์ฌ์ด์ ๊ฐ์ด์ด์ผ ํ๋ค. ์ด๋ ์ฐ์ฐ์๋ ํผ์ฐ์ฐ์๋ฅผ 32๋นํธ ์ ์๋ก ๋ณํํํ ์ฌ์ฏ ๋ฒ์งธ ์ด์์ ๋นํธ๋ฅผ ๋ฒ๋ฆผ์ผ๋ก์จ ์ด ์ซ์๊ฐ ์ ์ ํ ๋ฒ์์ ๋ค๋๋ก ํ๋ค. ๋๋๊ฒ๋ NaN, ์์ ๋ฌดํ๋(infinity), ์์ ๋ฌดํ๋(-infinity)๋ ๋นํธ ๋จ์ ์ฐ์ฐ์์ ํผ์ฐ์ฐ์๋ก ์ฌ์ฉ๋ ๋ ๋ชจ๋ ๊ฐ์ด 0์ผ๋ก ๋ฐ๋๋ค.
๋นํธ ๋จ์ AND(&)
& ์ฐ์ฐ์๋ ๋ ์ ์ ํผ์ฐ์ฐ์์ ๊ฐ๋ณ ๋นํธ๋ผ๋ฆฌ ๋ถ๋ฆฌ์ธ AND ์ฐ์ฐ์ ์ํํ๋ค. ๋์ผ ์์น์ ๋นํธ๊ฐ ๋ ํผ์ฐ์ฐ์์์ ๋ชจ๋ ์ค์ ๋์ด ์์ด์ผ๋ง ๊ฒฐ๊ณผ ๊ฐ์ ํด๋น ๋นํธ๋ ์ค์ ๋๋ค. ์๋ฅผ ๋ค์ด 0x1234 & 0x00FF์ ๊ฒฐ๊ณผ๋ 0x0034๋ค.
๋นํธ ๋จ์ OR ( | )
| ์ฐ์ฐ์๋ ๋์ ์ ํผ์ฐ์ฐ์์ ๊ฐ๋ณ ๋นํธ๋ผ๋ฆฌ ๋ถ๋ฆฌ์ธOR ์ฐ์ฐ์ ์ํํ๋ค. ์ ์ด๋ ํ๋ ์ด์์ ํผ์ฐ์ฐ์์๊ฒ ํน์ ์์น์ ๋นํธ๊ฐ ์ค์ ๋์ด ์์ผ๋ฉด ๊ฒฐ๊ณผ ๊ฐ์ ํด๋น ์์น ๋นํธ๊ฐ ์ค์ ๋๋ค. ์๋ฅผ ๋ค์ด 0x1234 | 0x00FF์ ๊ฒฐ๊ณผ๋ 0x12FF๋ค.
๋นํธ ๋จ์ XOR (^)
^์ฐ์ฐ์๋ ๋ ์ ์ ํผ์ฐ์ฐ์์ ๊ฐ๋ณ ๋นํธ๋ผ๋ฆฌ ๋ฐฐํ์ (exclusive) ๋ถ๋ฆฌ์ธ OR (XOR) ์ฐ์ฐ์ ์ํํ๋ค. ๋ฐฐํ์ OR๋ ๋ ์ฐ์ฐ์ ์ค ํ๋๊ฐ true์ด์ง๋ง ๋ ๋ค true๋ ์๋๋ ๊ฒฐ๊ณผ๊ฐ true๊ฐ ๋๋ค. ๋ ํผ์ฐ์ฐ์ ์ค ํ๋์๋ง ํน์ ์์น์ ๋นํธ๊ฐ ์ค์ ๋์ด ์์ผ๋ฉด ๊ฒฐ๊ณผ ๊ฐ์ ํด๋น ์์น ๋นํธ๋ ์ค์ ๋๋ค. ์๋ฅผ ๋ค์ด 0xFF00 ^ 0xF0F0์ ๊ฒฐ๊ณผ๋ 0x0FF0๋ค.
๋นํธ ๋จ์ NOT (~)
~์ฐ์ฐ์๋ ๋จํญ ์ฐ์ฐ์๋ก ํ๋์ ์ ์ ํผ์ฐ์ฐ์ ์์ ์์นํ๋ค. ~ ์ฐ์ฐ์๋ ํผ์ฐ์ฐ์์ ๋ชจ๋ ๋นํธ๋ฅผ ๋ฐ์ ์ํจ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ถํธ ์๋ ์ ์๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ธํด, ์ด๋ค ๊ฐ์ ~ ์ฐ์ฐ์๋ฅผ ์ ์ฉํ๋ฉด ๊ทธ ๊ฐ์ ๋ถํธ๋ฅผ ๋ฐ๊พธ๊ณ 1์ ๋นผ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ฒ ๋๋ค. ์๋ฅผ ๋ค์ด ~0x0F๋ 0xFFFFFFF0์ด๋ฉฐ, ์ด๋ -16๊ณผ ๊ฐ๋ค.
์ผ์ชฝ์ผ๋ก ์ด๋ (<<)
<< ์ฐ์ฐ์๋ ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์์ ๋ชจ๋ ๋นํธ๋ฅผ ๋ ๋ฒ์งธ ํผ์ฐ์ฐ์์์ ์ง์ ํ ์๋ฆฟ์๋งํผ ์ผ์ชฝ์ผ๋ก ์ด๋์ํจ๋ค. ๋ ๋ฒ์งธ ํผ์ฐ์ฐ์๋ ๋ฐ๋์ 0๊ณผ 31 ์ฌ์ด์ ์ ์์ฌ์ผ ํ๋ค. ์๋ฅผ ๋ค์ด a << 1 ์ฐ์ฐ์ ๊ฒฝ์ฐ a์ ์ฒซ ๋ฒ์งธ ๋นํธ๋ ๋ ๋ฒ์งธ ๋นํธ๊ฐ ๋๊ณ , ๋ ๋ฒ์งธ ๋นํธ๋ ์ธ ๋ฒ์งธ ๋นํธ๊ฐ ๋๊ณ โฆ ์ด ๊ณผ์ ์ด ์ด์ด์ง๋ค. ๋ชจ๋ ๋นํธ๋ฅผ ์ด๋์ํค๋ฉด ์ฒซ ๋ฒ์งธ ๋นํธ๋ฅผ ์ ๋ง๋ค์ด์ผ ํ๋๋ฐ, ์๋ก ๋ง๋ค์ด์ง๋ ๋นํธ์ ๊ฐ์ผ๋ก๋ 0์ด ์ฌ์ฉ๋๋ฉฐ ๊ธฐ์กด์ 32๋ฒ์งธ ๋นํธ๋ ์์ด๋ฒ๋ฆฌ๊ฒ ๋๋ค. ์ด๋ค ๊ฐ์ ์ผ์ชฝ์ผ๋ก ํ ์๋ฆฌ ์ด๋์ํค๋ ๊ฒ์ 2๋ฅผ ๊ณฑํ๋ ๊ฒ๊ณผ ๊ฐ์ผ๋ฉฐ, ๋ ์๋ฆฌ ์ด๋์ํค๋ ๊ฒ์ 4๋ฅผ ๊ณฑํ๋ ๊ฒ๊ณผ ๊ฐ๋ค. ์๋ฅผ ๋ค์ด 7 << 2์ ๊ฒฐ๊ณผ๋ 28์ด๋ค.
๋ถํธ๋ฅผ ๋ณด์กดํ๋ฉด์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ ( >>)
์ฐ์ฐ์๋ ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์์ ๋ชจ๋ ๋นํธ๋ฅผ ๋ ๋ฒ์งธ ํผ์ฐ์ฐ์์์ ์ง์ ํ ์๋ฆฟ์๋งํผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํจ๋ค. ๋ ๋ฒ์งธ ํผ์ฐ์ฐ์๋ ๋ฐ๋์ 0๊ณผ 31 ์ฌ์ด์ ์ ์์ฌ์ผ ํ๋ค. ๋นํธ๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํค๋ฉด ๋งจ ์ค๋ฅธ์ชฝ ๋นํธ๋ค์ ์์ค๋๋ค. ์ผ์ชฝ ์๋ฆฌ์ ์ฑ์์ง ๋นํธ๋ ์ต์ ํผ์ฐ์ฐ์์ ๋ถํธ ๋นํธ๊ฐ ๋๊ณ , ์ด๋ ๊ณง ๊ฒฐ๊ณผ ๊ฐ์ ๋ถํธ๊ฐ ๋๋ค. ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์๊ฐ ์์๋ฉด, ๊ฒฐ๊ณผ ๊ฐ์ ์ต์์ ๋นํธ๊ฐ 0์ด ๋๊ณ , ์์๋ฉด ์ต์์ ๋นํธ 1์ด ๋๋ค. ์ด๋ค ๊ฐ์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์๋ฆฌ ์ด๋์ํค๋ ๊ฒ์ ์ด ๊ฐ์ 2๋ก ๋๋๋ ๊ฒ๊ณผ ๊ฐ๊ณ , ์ค๋ฅธ์ชฝ์ผ๋ก ๋ ์๋ฆฌ๋ฅผ ์ด๋์ํค๋ ๊ฒ์ ๊ฐ์ 4๋ก ๋๋๋ ๊ฒ๊ณผ ๊ฐ๋ค. ์๋ฅผ ๋ค์ด, 7 >> 1์ ๊ฒฐ๊ณผ๋ 3์ด๊ณ , -7 >> 1์ ๊ฒฐ๊ณผ๋ -4๋ค.
0์ผ๋ก ์ฑ์ฐ๋ฉด์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ ( >>> )
์ฐ์ฐ์๋ >> ์ฐ์ฐ์์ ํ ๊ฐ์ง๋ฅผ ์ ์ธํ๊ณ ๋ ๋๊ฐ๋ค. ์ฐจ์ด์ ์, ์ผ์ชฝ ์๋ฆฌ์ ์๋ก ๋ค์ด์ค๋ ๋นํธ๊ฐ ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์์ ๋ถํธ์ ๊ด๊ณ์์ด ๋ฌด์กฐ๊ฑด 0์ด๋ผ๋ ์ ์ด๋ค. ์๋ฅผ ๋ค์ด, -1 >> 4์ ๊ฒฐ๊ณผ๋ -1์ด์ง๋ง, -1 >>> 4์ ๊ฒฐ๊ณผ๋ 0x0FFFFFFF๋ค.
4.9 ๊ด๊ณํ ํํ์
์ด๋ฒ ์ ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ๋ ๊ด๊ณํ ์ฐ์ฐ์(relational operator)๋ฅผ ๋ค๋ฃฌ๋ค. ์ด๋ฌํ ์ฐ์ฐ์๋ค์ ๋ ํผ์ฐ์ฐ์ ๊ฐ์ ๊ด๊ณ(์ด๋ฅผํ ๋ฉด ๋ ๊ฐ์ด ๊ฐ์์ง, ํ ๊ฐ์ด ๋ค๋ฅธ ๊ฐ๋ณด๋ค ์์์ง ๋๋ ํ ๊ฐ์ด ๋ค๋ฅธ ๊ฐ์ ํ๋กํผํฐ๋ก ์กด์ฌํ๋์ง ๋ฑ)๋ฅผ ๊ฒ์ฌํ์ฌ, ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๋ฉด true๋ฅผ, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค. ๊ด๊ณํ ํํ์์ ํญ์ ๋ถ๋ฆฌ์ธ ๊ฐ์ผ๋ก ํ๊ฐ๋๊ณ , ์ด ๊ฐ์ ํ๋ก๊ทธ๋จ ์คํ์ ํ๋ฆ์ ์ ์ดํ๊ธฐ ์ํ if๋ฌธ, while๋ฌธ, for ๋ฃจํ๋ฌธ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค. ์ด์ ๋ถํฐ ๋์น์ ๋ถ๋ฑ์น ์ฐ์ฐ์, ๋น๊ต ์ฐ์ฐ์, ๊ด๊ณํ ์ฐ์ฐ์์ธ in๊ณผ instanceof๋ฅผ ์ดํด๋ณด๊ฒ ๋ค.
4.9.1 ๋์น์ ๋ถ๋ฑ์น ์ฐ์ฐ์
==์ === ์ฐ์ฐ์ ๋ชจ๋ ์ฃผ์ด์ง ๋ ๊ฐ์ด ๊ฐ์์ง๋ฅผ ํ์ธํ๋ ๋ฐ ์ฐ์ด์ง๋ง ๊ฐ์์ ์ ์ํ๋ ๊ธฐ์ค์ด ์๋ก ๋ค๋ฅด๋ค. ๋ ์ฐ์ฐ์ ๋ชจ๋ ํผ์ฐ์ฐ์ ํ์ ์ ๊ฐ๋ฆฌ์ง ์๊ณ , ์ฃผ์ด์ง ํผ์ฐ์ฐ์๋ค์ด ๊ฐ์ผ๋ฉด true๋ฅผ, ๋ค๋ฅด๋ฉด false๋ฅผ ๋ฐํํ๋ค. === ์ฐ์ฐ์๋ ์ผ์น(์๊ฒฉํ ๋์น) ์ฐ์ฐ์๋ก ์๋ ค์ ธ ์๋๋ฐ, ๊ฐ์์ ์ ์ํ๋ ๊ธฐ์ค์ ๋งค์ฐ ์๊ฒฉํ๊ฒ ์ ์ํ์ฌ, ๋ ํผ์ฐ์ฐ์๊ฐ '์ผ์น(identical)'ํ๋์ง ํ์ธํ๋ค. == ์ฐ์ฐ์๋ ๋์น ์ฐ์ฐ์๋ก ์๋ ค์ ธ ์์ผ๋ฉฐ, ๋ ํผ์ฐ์ฐ์๊ฐ '๋๋ฑ(equal)'ํ์ง ํ์ธํ ๋ ํ์ํ ๊ฒฝ์ฐ ํ์ ๋ณํ์ ํ์ฉํ๋ค. ์ด๋ ๊ฐ์์ ์ ์ํ๋ ๊ธฐ์ค์ด === ์ฐ์ฐ์๋งํผ ์๊ฒฉํ์ง๋ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ =(ํ ๋น), ==(๋์น), ===(์ผ์น) ์ฐ์ฐ์๋ฅผ ์ง์ํ๊ณ ์๋ค. ์ฌ๋ฌ๋ถ์ ํ ๋น, ๋์น, ์ผ์น ์ฐ์ฐ์์ ์ฐจ์ด๋ฅผ ํ์คํ๊ฒ ์ดํดํด์ผ ํ๋ฉฐ, ์ฝ๋ฉํ ๋ ์ฌ๋ฐ๋ฅธ ๊ฒ์ ์ฌ์ฉํ๋๋ก ์ฃผ์ํด์ผ ํ๋ค! ์ด ์ธ๊ฐ์ง๋ฅผ ๋ชจ๋ ๊ฐ์(equal)์ฐ์ฐ์๋ก ํผ๋ํ๊ธฐ ์ฌ์ด๋ฐ, ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ํผ๋์ ์ค์ด๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ด๋ค. = ์ฐ์ฐ์๋ '์ทจํ๋ค(get) ๋๋ ํ ๋นํ๋ค(assigned)'๋ก, == ์ฐ์ฐ์๋ '~์ ๊ฐ์ ๊ฐ์ผ๋ก ๋ณผ ์ ์๋ค(is equal to)', ๋ง์ง๋ง์ผ๋ก === ์ฐ์ฐ์๋ '~์ ์ผ์นํ๋ค(is strictly equal to)'๋ก ์ฝ๋ ๊ฒ์ด๋ค. !=์ !== ์ฐ์ฐ์๊ฐ ๋น๊ตํ๋ ๊ฒ์ ์์์ ์ดํด๋ณธ ==์ ===์ฐ์ฐ์๊ฐ ๋น๊ตํ๋๊ฒ๊ณผ ์ ํํ ๋ฐ๋๋ค. ๋ถ๋ฑ์น ์ฐ์ฐ์ !=๋ ๋ ๊ฐ์ด ์๋ก ๋์น์ผ ๊ฒฝ์ฐ false๋ฅผ ๋ฐํํ๋ฉฐ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ true๋ฅผ ๋ฐํํ๋ค. ๋ถ์ผ์น ์ฐ์ฐ์ !==๋ ๋ ๊ฐ์ด ์๋ก ์ผ์นํ ๊ฒฝ์ฐ false๋ฅผ ๋ฐํํ๋ฉฐ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ true๋ฅผ ๋ฐํํ๋ค. 4.10์ ์์ ์ดํด๋ณด๊ฒ ์ง๋ง, ! ์ฐ์ฐ์๋ ๋ถ๋ฆฌ์ธ NOT ์ฐ์ฐ์ ์ํํ๋ค. ์ด ์ ์ ๊ฐ์ํ๋ฉด !=๊ฐ '๊ฐ์ ๊ฐ์ผ๋ก ๋ณผ ์ ์๋ค'๋ฅผ ๋ํ๋ด๋ฉฐ, !==๋ '์ผ์นํ์ง ์๋๋ค'๋ฅผ ๋งํ๋ค๋ ์ฌ์ค์ ์ฝ๊ฒ ๋ ์ฌ๋ฆด ์ ์์ ๊ฒ์ด๋ค.
3.7์ ์์ ์ค๋ช ํ๋ฏ์ด, ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ ๋น๊ต๊ฐ ์๋, ์ฐธ์กฐ ๋น๊ต๋ฅผ ์ํํ๋ค. ๊ฐ๋จํ ๋งํด์, ๊ฐ์ฒด๋ ์๊ธฐ ์์ ๊ณผ๋ ๊ฐ์ง๋ง ๋ค๋ฅธ ๊ฐ์ฒด์๋ ๊ฐ์ง ์๋ค. ์๋ฅผ ๋ค์ด ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ๊ฐ์ ์์ ํ๋กํผํฐ๋ฅผ ๊ฐ๊ณ , ๊ฐ ํ๋กํผํฐ ์ด๋ฆ๊ณผ ๊ฐ์ด ์๋ก ๊ฐ๋๋ผ๋ ๋ ๊ฐ์ฒด๋ ์ฌ์ ํ ๋ค๋ฅธ ๊ฐ์ฒด๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ ๋ฐฐ์ด์ด ๊ฐ์ ์์๋ค์ ๊ฐ์ ์์๋ก ๊ฐ์ง๊ณ ์์์ง๋ผ๋, ์ด ๋ ๋ฐฐ์ด์ ๊ฐ์ง ์๋ค. ์ผ์น ์ฐ์ฐ์ ===๊ฐ ๋ ๊ฐ์ด ์ผ์นํ๋์ง ์ฌ๋ถ๋ฅผ ํ๋จํ ๋๋ ๋ค์์ ๊ท์น์ ๋ฐ๋ฅด๋ฉฐ, ํ์ ๋ณํ์ ํ์ง ์๋๋ค.
โข ๋ ๊ฐ์ ํ์
์ด ์๋ก ๋ค๋ฅด๋ฉด ๋ ๊ฐ์ ์ผ์นํ์ง ์๋๋ค.
โข ๋ ๊ฐ์ด ๋ชจ๋ null์ด๊ฑฐ๋ ๋ชจ๋ undefined๋ฉด, ๋ ๊ฐ์ ์ผ์นํ๋ค.
โข ๋ ๊ฐ์ด ๋ชจ๋ ๋ถ๋ฆฌ์ธ ๊ฐ true์ด๊ฑฐ๋ ๋ชจ๋ false์ผ ๊ฒฝ์ฐ์, ๋ ๊ฐ์ ์ผ์นํ๋ค.
โข ์ ์ด๋ ํ๋์ ๊ฐ์ด NaN์ด๋ฉด ๋ ๊ฐ์ ์ผ์นํ์ง ์๋๋ค. NaN๊ฐ์ ์๊ธฐ ์์ ์ ํฌํจํด ๋ค๋ฅธ ์ด๋ ํ ๊ฐ๊ณผ๋ ์ผ์นํ์ง ์๋๋ค. ์์์ ๊ฐ x๊ฐ NaN์ธ์ง ๊ฒ์ฌํ๊ธฐ ์ํด์๋ x !== x์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋๋ค. NaN์ ์ด ํํ์์ ์ฐธ์ผ๋ก ๋ง๋๋ ์ ์ผํ ๊ฐ์ด๋ค.
โข ๋ ๊ฐ์ด ๋ชจ๋ ์ซ์๊ณ ๊ฐ์ ๊ฐ์ ๊ฐ๋๋ค๋ฉด, ๋ ๊ฐ์ ์ผ์นํ๋ค. ๋ง์ฝ ํ๋์ ๊ฐ์ด 0์ด๊ณ ๋ค๋ฅธ ํ๋์ ๊ฐ์ด -0์ผ์ง๋ผ๋, ๋ ๊ฐ์ ์ผ์นํ๋ค.
โข ๋ ๊ฐ์ด ๋ชจ๋ ๋ฌธ์์ด์ด๊ณ , ๊ฐ์ ์์น์ ์ ํํ ๊ฐ์ 16๋นํธ ๊ฐ(3.2์ ์ฐธ๊ณ )์ ๊ฐ์ง๊ณ ์๋ค๋ฉด, ๋ ๊ฐ์ ์ผ์นํ๋ค. ๋ง์ฝ ๋ฌธ์์ด์ ๊ธธ์ด๋ ๋ด์ฉ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ, ๋ ๊ฐ์ ์ผ์นํ์ง ์๋๋ค. ๋ ๋ฌธ์์ด์ด ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ๊ณ , ์ก์์ ๊ฐ์ ๋ฌธ์์ด์ ๊ฐ๋๋ผ๋ 16๋นํธ ๊ฐ์ ์์๊ฐ ๋ค๋ฅด๊ฒ ์ธ์ฝ๋ฉ๋์ด ์์ ์๋ ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ ๋์ฝ๋ ๋ฌธ์์ด์ ๋ํด์ ์ ๊ทํ ๊ณผ์ ์ ์ํํ์ง ์์ผ๋ฉฐ, ์ด๋ฐ ๋ฌธ์์ด๋ค์ === ๋ == ์ฐ์ฐ์๋ก๋ ๊ฐ๋ค๊ณ ํ์ ๋์ง ์๋๋ค. ์ด์ ๊ฐ์ ๋ฌธ์์ด์ ๋น๊ตํ๋ ค๋ฉด 3๋ถ์์ ๋ค๋ฃจ๋ String.localeCompare()๋ฅผ ์ฐธ๊ณ ํ๋ผ.
โข ๋ ๊ฐ์ด ๋ชจ๋ ๊ฐ์ ๊ฐ์ฒด๋ ๋ฐฐ์ด ๋๋ ํจ์๋ฅผ ์ฐธ์กฐํ๊ณ ์์ผ๋ฉด, ๋ ๊ฐ์ ์ผ์นํ๋ค. ๋ ๊ฐ์ด ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๊ฒฝ์ฐ์ ใ
ใ
ใน์ฌ ๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ์ผ์นํ๋๋ผ๋ ๋ ๊ฐ์ ์ผ์นํ์ง ์๋๋ค.๋์น ์ฐ์ฐ์ ==๋ ์ผ์น ์ฐ์ฐ์์ ์ ์ฌํ์ง๋ง ์๋์ ์ผ๋ก ๊ท์น์ด ์๊ฒฉํ์ง ์๋ค. ๋ ํผ์ฐ์ฐ์์ ๊ฐ์ด ๊ฐ์ ํ์ ์ด ์๋ ๊ฒฝ์ฐ์๋ ์ผ๋ถ ํผ์ฐ์ฐ์์ ๋ํด ํ์ ๋ณํ์ ์๋ํ ํ์ ๋น๊ต๋ฅผ ๋ค์ ํ๊ฒ ๋๋ค. ๋ ๊ฐ์ด ๋๋ฑํ์ง ์ฌ๋ถ๋ฅผ ํ๋จํ ๋๋ ๋ค์์ ๊ท์น์ ๋ฐ๋ฅธ๋ค.
โข ๋ ๊ฐ์ ํ์
์ด ๊ฐ์ ๊ฒฝ์ฐ, ๋ ๊ฐ์ด ์ผ์นํ๋์ง ํ
์คํธํ๋ค. ๋ง์ฝ ๋ ๊ฐ์ด ์ผ์นํ ๊ฒฝ์ฐ ๋ ๊ฐ์ ๋์น๋ค. ํ์ง๋ง ๋ ๊ฐ์ด ์ผ์นํ์ง ์์ผ๋ฉด ๋ ๊ฐ์ ๋์น๊ฐ ์๋๋ค.
โข ๋ ๊ฐ์ ํ์
์ด ๋ค๋ฅผ ๊ฒฝ์ฐ๋ผ ํ ์ง๋ผ๋ ๋์น์ผ ์ฌ์ง๊ฐ ์๋ค. ๋์น์์ ํ์ธํ๋ ๊ณผ์ ์์ ๋ค์์ ๋์ด๋ ๊ท์น๋ค๊ณผ ํ์
๋ณํ์ด ์ฌ์ฉ๋๋ค.
* ๋ ๊ฐ ์ค ํ๋๊ฐ null์ด๊ณ ๋ค๋ฅธ ํ๋๊ฐ undefined๋ผ๋ฉด ๋ ๊ฐ์๋๋ฑํ๋ค.
* ํ ๊ฐ์ด ์ซ์์ด๊ณ ๋ค๋ฅธ ํ๋๊ฐ ๋ฌธ์์ด์ด๋ฉด, ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํํ ํ ์ด๋ฅผ ์ฌ์ฉํด ๋ค์ ๋น๊ตํ๋ค.
* ๋ ๊ฐ ์ค ํ๋๊ฐ true์ด๋ฉด ์ด๋ฅผ 1๋ก ๋ณํํ ํ ๋ค์ ๋น๊ตํ๋ค. ๋ ๊ฐ ์ค ํ๋๊ฐ false์ด๋ฉด, ์ด๋ฅผ 0์ผ๋ก
๋ณํํ ํ ๋ค์ ๋น๊ตํ๋ค.
* ํ ๊ฐ์ด ๊ฐ์ฒด๊ณ , ๋ค๋ฅธ ํ๋๋ ์ซ์ ๋๋ ๋ฌธ์์ด์ด๋ฉด, ๊ฐ์ฒด๋ฅผ ์์ ํ์
์ ๊ฐ์ผ๋ก ๋ณํํ ํ ๋ค์ ๋น๊ต
ํ๋ค. ๊ฐ์ฒด๋ฅผ ์์ ๊ฐ์ผ๋ก ๋ณํํ๋ ๋ฐ์๋ ํด๋น ๊ฐ์ฒด์ toString() ๋ฉ์๋๋ valueOf() ๋ฉ์๋๊ฐ ์ฌ์ฉ
๋๋ค. ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ด์ฅ ํด๋์ค์์๋ toString90 ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ valueOf() ๋ฉ์๋
๋ฅผ ์ฌ์ฉํ ๋ณํ์ ๋จผ์ ์๋ํ๋ค. ๋จ, Date ํด๋์ค๋ ์์ธ์ ์ผ๋ก toString() ๋ณํ์ ๋ฐ๋ก ์ํํ๋ค. ์ฝ
์ด ์๋ฐ์คํฌ๋ฆฝํธ์ ์ํ์ง ์์ ๊ฐ์ฒด์์๋ ๊ฐ ๊ตฌํ์์ ์ ์ํ ๋ฐฉ์์ผ๋ก ์์ ๊ฐ ๋ณํ์ ์ํํ๋ค.
* ์์์ ์ด๊ฑฐํ์ง ์์ ๊ธฐํ ๊ฐ๋ค์ ์กฐํฉ์ ๋์น๊ฐ ์๋๋ค.๋๋ฑํจ์ ํ ์คํธํ๋ ์๋ก ๋ค์์ ๋น๊ต์์ ์ดํด๋ณด์.
"1" == true
์ด ํํ์์ true๊ฐ ๋๋ค. ๊ฒ๋ณด๊ธฐ์ ๋งค์ฐ ๋ค๋ฅธ ๊ฐ๋ค์์๋ ๋ถ๊ตฌํ๊ณ ์ฌ์ค์ ๋๋ฑํ ๊ด๊ณ์ธ ๊ฒ์ด๋ค. ์ด ํํ์์์๋ ๋จผ์ ๋ถ๋ฆฌ์ธ ๊ฐ true๊ฐ ์ซ์ 1๋ก ๋ณํ๋ํ ๋ค์ ๋น๊ตํ๋ค. ์ด์ด์ ๋ฌธ์์ด"1"์ด ์ซ์ 1๋ก ๋ณํ๋๋ค. ์ด์ ๋ ์ซ์๋ ๊ฐ์ ์ซ์์ด๊ธฐ ๋๋ฌธ์ ๋น๊ต์์ ๊ฒฐ๊ณผ๋ก true๋ฅผ ๋ฐํํ๋ค.
4.9.2 ๋น๊ต ์ฐ์ฐ์
๋น๊ต ์ฐ์ฐ์๋ ๋ ํผ์ฐ์ฐ์ ๊ฐ์ ์๋์ ์ธ ์์๋ฅผ ํ๋จํ๋ ๋ฐ ์ฐ์ธ๋ค.
๋ ์๋ค (<)
< ์ฐ์ฐ์๋ ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์๊ฐ ๋ ๋ฒ์งธ ํผ์ฐ์ฐ์๋ณด๋ค ํฌ๋ฉด true๋ก, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ก ํ๊ฐ๋๋ค.
๋ ํฌ๋ค (>)
์ฐ์ฐ์๋ ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์๊ฐ ๋๋ฒ์งธ ํผ์ฐ์ฐ์๋ณด๋ค ํฌ๋ฉด true๋ก, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ก ํ๊ฐ๋๋ค.
์๊ฑฐ๋ ๊ฐ๋ค ( <= )
<= ์ฐ์ฐ์๋ ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์๊ฐ ๋ ๋ฒ์งธ ํผ์ฐ์ฐ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด true๋ก, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ก ํ๊ฐ๋
๋ค.
ํฌ๊ฑฐ๋ ๊ฐ๋ค ( >= )
= ์ฐ์ฐ์๋ ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์๊ฐ ๋ ๋ฒ์งธ ํผ์ฐ์ฐ์๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด true๋ก, ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ก ํ๊ฐ๋
๋ค.๋น๊ต ์ฐ์ฐ์๋ ํผ์ฐ์ฐ์ ํ์ ์ ์ ํ์ด ์๋ค. ํ์ง๋ง ์ค์ง ์ซ์์ ๋ฌธ์์ด๋ง ๋น๊ตํ ์ ์๊ธฐ ๋๋ฌธ์, ์ซ์๋ ๋ฌธ์์ด์ด ์๋ ํผ์ฐ์ฐ์๋ ๋จผ์ ๋ณํ๋๋ค. ๋น๊ต์ ๋ณํ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ด๋๋ค.
โข ํผ์ฐ์ฐ์ ์ค ์ด๋ ํ๋๊ฐ ๊ฐ์ฒด๋ก ํ๊ฐ๋๋ฉด, 3.8.3์์ ์ดํด๋ดค๋ฏ์ด ํด๋น ๊ฐ์ฒด๊ฐ ์์ ๊ฐ์ผ๋ก ๋ณํ๋๋๋ฐ, ์ด ๊ณผ์ ์์ valueOf() ๋ฉ์๋์ ๋ฐํ๊ฐ์ด ์์ ํ์
์ด๋ฉด ๊ทธ ๊ฐ์ ์ด์ฉํ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ toString() ๋ฉ์๋์ ๋ฐํ ๊ฐ์ ์ด์ฉํ๋ค.
โข ๊ฐ์ฒด๊ฐ ์์ ํ์
์ผ๋ก ๋ณํ๋ ํ์ ํผ์ฐ์ฐ์๊ฐ ๋ชจ๋ ๋ฌธ์์ด์ด๋ผ๋ฉด '์ํ๋ฒณ ์์'๋๋ก ๋ ๋ฌธ์์ด์ ๋น๊ตํ๊ฒ ๋๋ค. ์ฌ๊ธฐ์ '์ํ๋ฒณ ์์'๋ ๋ฌธ์์ด์ ๊ตฌ์ฑํ๋ 16๋นํธ ์ ๋์ฝ๋ ๊ฐ์ ์์๋ฅผ ๋งํ๋ค.
โข ๊ฐ์ฒด๊ฐ ์์ ํ์
์ผ๋ก ๋ณํ๋ ํ์ ์ต์ํ ํผ์ฐ์ฐ์ ์ค ํ๋๊ฐ ๋ฌธ์์ด์ด ์๋๋ฉด, ํผ์ฐ์ฐ์ ๋ชจ๋ ์ซ์๋ก ๋ณํ๋ ํ ๊ฐ์ ๋น๊ตํ๊ฒ ๋๋ค. 0๊ณผ -0์ ์๋ฏธ์ ๋์ผํ๋ค. ์์ ๋ฌดํ๋๋ ์์ ๋ฌดํ๋๊ฐ ์๋ ์ด๋ค ์๋ณด๋ค ํฌ๊ณ , ์์ ๋ฌดํ๋๋ ์์ ๋ฌดํ๋๊ฐ ์๋ ์ด๋ค ์๋ณด๋ค ์๋ค. ๋ ์ค์ ํ๋์ ํผ์ฐ์ฐ์๊ฐ NaN์ด๊ฑฐ๋ NaN์ผ๋ก ๋ณํ๋๋ค๋ฉด ๋น๊ต ์ฐ์ฐ์๋ ์ธ์ ๋ false๋ฅผ ๋ฐํํ๋ค.์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ์์ด์ 16๋นํธ ์ ์ ๊ฐ๋ค์ ๋์ด์ด๊ณ , ๋ฌธ์์ด ๋น๊ต๋ ๋จ์ํ ๋ ๋ฌธ์์ด์ด ๊ฐ์ง๊ณ ์๋ ๊ฐ ๋ฌธ์์ ํด๋นํ๋ ์ซ์ ๊ฐ์ ๋น๊ต๋ผ๋ ์ ์ ์ ๋ ํด์ผ ํ๋ค. ์ ๋์ฝ๋์ ์ํด ์ ์๋ ์ซ์ ์ธ์ฝ๋ฉ ์์๋ ์ด๋ค ํน์ ์ธ์ด๋ ๋ก์ผ์ผ(locale)์ ์ฌ์ฉ๋๋ ๊ณ ์ ๋ฌธ์์ ์กฐํฉ๊ณผ ์์๊ฐ ๋ค๋ฅผ ์ ์๋ค. ๋ํ, ๋ฌธ์์ด ๋น๊ต๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๋ค๋ ์ ์ ์ผ๋์ ๋์ด์ผ ํ๋๋ฐ, ๋ชจ๋ ASCII ๋๋ฌธ์๋ ๋ชจ๋ ASCII ์๋ฌธ์๋ณด๋ค '์๋ค'. ์ด ์ ์ ๋ฏธ๋ฆฌ ์์ง ๋ชปํ๋ฉด ๋ฌธ์์ด ๋น๊ต ๊ฒฐ๊ณผ์ ํผ๋์ ๊ฒช์ ์ ์๋ค. ์๋ฅผ ๋ค๋ฉด < ์ฐ์ฐ์์ ๋ํด ๋ฌธ์์ด "Zoo"๋ ๋ฌธ์์ด "aardvark"๋ณด๋ค ์๋ค.
๋ก์ผ์ผ ์ฐจ์ด์์ ์ค๋ ์ํ๋ฒณ ์์ ์ฐจ์ด ๋ฑ์ ๋ฌธ์ ๊น์ง ๊ณ ๋ คํ๋, ์ข ๋ ๊ฒฌ๊ณ ํ ๋ฌธ์์ด ๋น๊ต ์๊ณ ๋ฆฌ์ฆ์ผ๋ก String.localeCompare() ๋ฉ์๋๊ฐ ์๋ค. ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ๋ฌธ์์ด์ ๋น๊ตํ๋ ค๋ฉด, ์ฐ์ String.toLowerCase()๋ String.toUpperCase() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๋น๊ตํ ๋ฌธ์์ด์ ์ ๋ถ ์๋ฌธ์๋ ๋๋ฌธ์๋ก ๋ณํํด์ผ ํ๋ค.
- ์ฐ์ฐ์์ ๋น๊ต ์ฐ์ฐ์๋ ํผ์ฐ์ฐ์๋ก ์ซ์๊ฐ ์ฌ ๊ฒฝ์ฐ์ ๋ฌธ์์ด์ด ์ฌ ๊ฒฝ์ฐ ์ ํ ๋ค๋ฅด๊ฒ ๋์ํ๋ค. + ์ฐ์ฐ์๋ ๋ฌธ์์ด์ ์ ํธํ๋๋ฐ, ํผ์ฐ์ฐ์๊ฐ ๋ฌธ์์ด์ผ ๋๋ ๋ฌธ์์ด์ ์ด์ด๋ถ์ด๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ๋น๊ต ์ฐ์ฐ์๋ ์ซ์๋ฅผ ์ ํธํ๊ณ , ๋ ํผ์ฐ์ฐ์๋ค์ด ๋ฌธ์์ด์ผ ๋๋ง ๋ฌธ์์ด ๋น๊ต๋ฅผ ํ๋ค.
1 + 2 // ๋ง์ . ๊ฒฐ๊ณผ๋ 3 "1" + "2" // ๊ฒฐ๊ณผ๋ '12' "1" + 2 // 2๊ฐ ๋ฌธ์์ด๋ก ๋ณํ๋๊ณ , ๊ฒฐ๊ณผ๋ '12' 11 < 3 // ์ซ์ ๋น๊ต. ๊ฒฐ๊ณผ๋ false "11" < "3" // ์ซ์ ๋น๊ต. '11'์ด ์ซ์ 11๋ก ๋ณํ๋๊ณ , ๊ฒฐ๊ณผ๋ false. "11" < 3 // ์ซ์ ๋น๊ต. ๊ฒฐ๊ณผ๋ false "one" < 3 // ์ซ์ ๋น๊ต. 'one'์ด NaN์ผ๋ก ๋ณํ๋๊ณ , ๊ฒฐ๊ณผ๋ false.
๋ง์ง๋ง์ผ๋ก, <= ์ฐ์ฐ์(๋ ์๊ฑฐ๋ ๊ฐ๋ค)์ >= ์ฐ์ฐ์( ๋ ํฌ๊ฑฐ๋ ๊ฐ๋ค)๋ ๋ ๊ฐ์ด ๊ฐ์์ง ํ๋จํ ๋, ๋์น ์ฐ์ฐ์์ ํ์ ๋น๋ฆฌ์ง ์๋๋ค. ๊ทธ ๋์ , '๋ ์๊ฑฐ๋ ๊ฐ๋ค' ์ฐ์ฐ์๋ ๋จ์ํ 'ํฌ์ง ์๋ค'๋ก ์ ์๋๋ฉฐ, '๋ ํฌ๊ฑฐ๋ ๊ฐ๋ค' ์ฐ์ฐ์๋ ๋จ์ํ '์์ง ์๋ค'๋ก ์ ์๋๋ค. ๋จ ํ ๊ฐ์ง ์์ธ๊ฐ ์๋๋ฐ, ๋ ํผ์ฐ์ฐ์ ์ค ํ๋๊ฐ NaN์ด๋ฉด (๋๋ NaN์ผ๋ก ๋ณํ๋๋ฉด) ๋ค ์ข ๋ฅ์ ๋น๊ต ์ฐ์ฐ์ ๋ชจ๋ false๋ฅผ ๋ฐํํ๋ค.
4.9.3 in ์ฐ์ฐ์
in ์ฐ์ฐ์๋ ์ข๋ณ์ ํผ์ฐ์ฐ์๋ก ๋ฌธ์์ด(๋๋ ๋ฌธ์์ด๋ก ๋ณํ๋ ์ ์๋ ๊ฒ)์ ๋ฐ๋๋ค. ์ฐ๋ณ์ ํผ์ฐ์ฐ์๋ก๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๋ฐ๋๋ค. ์ข๋ณ ๊ฐ์ด ์ฐ๋ณ ๊ฐ์ฒด์ ํ๋กํผํฐ ์ด๋ฆ์ ํด๋นํ ๊ฒฝ์ฐ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ true๋ค. ์๋ฅผ ๋ค์ด๋ณด์.
var point = { x : 1, y : 1 } ; // ๊ฐ์ฒด ์ ์ "x" in point // => true: ํ๋กํผํฐ x๊ฐ ์๋ค. "z" in point // => false: ํ๋กํผํฐ z๊ฐ ์๋ค. "toString" in point // => true: ์์๋ ํ๋กํผํฐ var data = [7,8,9]; // ์์๊ฐ 0, 1, 2 ์์น์ ์ฐจ๋ก๋ก 7, 8, 9 "0" in data // => true: ๋ฐฐ์ด์ 0๋ฒ์งธ ์์๊ฐ ์๊ธฐ ๋๋ฌธ 1 in data // => true: ๋ฐฐ์ด์ 1๋ฒ์งธ ์์๊ฐ ์๊ธฐ ๋๋ฌธ 3 in data // => false: ๋ฐฐ์ด์ 3๋ฒ์งธ ์์๊ฐ ์๊ธฐ ๋๋ฌธ
4.9.4 instanceof ์ฐ์ฐ์
instanceof ์ฐ์ฐ์๋ ์ข๋ณ์ ํผ์ฐ์ฐ์๋ก ๊ฐ์ฒด๋ฅผ, ์ฐ๋ณ์ ํผ์ฐ์ฐ์๋ก ๊ฐ์ฒด ํด๋์ค์ ์ด๋ฆ์ ์๋ณ์๋ก ๋ฐ๋๋ค. ์ข๋ณ์ ์ค๋ ๊ฐ์ฒด๊ฐ ์ฐ๋ณ ํด๋์ค์ ์ธ์คํด์ค์ผ ๊ฒฝ์ฐ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ true๋ก ํ๊ฐ๋๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ false๋ก ํ๊ฐ๋๋ค. 9์ฅ์์ ์ค๋ช ํ๊ฒ ์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ฒด์ ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๋ ์์ฑ์ ํจ์๋ก๋ถํฐ ์ ์๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก instanceof์ ์ฐ๋ณ ํผ์ฐ์ฐ์๋ ํจ์๊ฐ ๋์ด์ผ ํ๋ค. ๋ค์ ์์ ๋ฅผ ์ดํด๋ณด์.
var d = new Date(); // Date() ์์ฑ์๋ก ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. d instanceof Date; // => true: d๋ Date()์ ์ํด ์์ฑ๋์๋ค. d instanceof Object; // => true: ๋ชจ๋ ๊ฐ์ฒด๋ Object์ ์ธ์คํด์ค. d instanceof Number; // => false: d๋ Number์ ๊ฐ์ฒด๊ฐ ์๋๋ค. var a = [1, 2, 3]; // ๋ฐฐ์ด ๋ฆฌํฐ๋ด ๋ฌธ๋ฒ์ผ๋ก ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ๋ค. d instanceof Array; // => true: a๋ ๋ฐฐ์ด์ด๋ค. d instanceof Object; // => true: ๋ชจ๋ ๋ฐฐ์ด์ ๊ฐ์ฒด๋ค. d instanceof RegExp; // => false: ๋ฐฐ์ด์ ์ ๊ท ํํ์์ด ์๋๋ค.
๋ชจ๋ ๊ฐ์ฒด๋ Object์ ์ธ์คํด์ค๋ผ๋ ์ ์ ๊ธฐ์ตํ์. instanceof๋ก ๊ฐ์ฒด๊ฐ ํด๋์ค์ ์ธ์คํด์ค์ธ์ง ํ๋จํ ๋๋ ํด๋น ๊ฐ์ฒด์ '์์ ํด๋์ค'๋ค๋ ๊ณ ๋ คํ๊ฒ ๋๋ค. ๋ง์ผ instanceof ์ ์ข๋ณ ํผ์ฐ์ฐ์๊ฐ ๊ฐ์ฒด๊ฐ ์๋๋ฉด, instanceof ์ ๊ฒฐ๊ณผ๋ false๋ค. ๋ํ ์ฐ๋ณ ํผ์ฐ์ฐ์๊ฐ ํจ์๊ฐ ์๋๋ผ๋ฉด TypeError ์์ธ๊ฐ ๋ฐ์ํ๋ค.
instanceof ์ฐ์ฐ์๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํดํ๊ธฐ ์ํด์๋ 'ํ๋กํ ํ์ ์ฒด์ธ'์ ์ดํดํด์ผ ํ๋ค. ํ๋กํ ํ์ ์ฒด์ธ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ ๋ฉ์ปค๋์ฆ์ผ๋ก 6.2.2์์ ์์ธํ ๋ค๋ฃฌ๋ค. o instanceof f ํํ์์ ํ๊ฐํ๊ธฐ ์ํด์ ์๋ฐ์คํฌ๋ฆฝํธ๋ f.prototype์ ํ๊ฐํ ํ, o์ ํ๋กํ ํ์ ์ฒด์ธ์ ๊ทธ ๊ฐ์ด ๋ํ๋๋์ง ๊ฒ์ํ๋ค. ๋ง์ผ o์ ํ๋กํ ํ์ ์ฒด์ธ์์ f.prototype ๊ฐ์ด ๋ฐ๊ฒฌ๋๋ฉด o๋ f์ ์ธ์คํด์ค(๋๋ f์ ํ์ ํด๋์ค์ ์ธ์คํด์ค)๊ฐ ๋๊ณ , ํํ์์ true๋ฅผ ๋ฐํํ๋ค. ๋ง์ผ o์ ํ๋กํ ํ์ ์ฒด์ธ์์ f.prototype ๊ฐ์ ์ฐพ์ ์ ์์ผ๋ฉด o๋ f์ ์ธ์คํด์ค๊ฐ ์๋๊ณ , ํํ์์ false๋ฅผ ๋ฐํํ๋ค.
4.10 ๋ ผ๋ฆฌ ํํ์
๋ ผ๋ฆฌ ์ฐ์ฐ์ &&, ||, ! ์ ๋ถ๋ฆฌ์ธ ๋์(Boolean algebra)๋ฅผ ์ํํ๋ค. ๋ ผ๋ฆฌ ์ฐ์ฐ์๋ ์ข ์ข ๋น๊ต ์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉ๋์ด ๋ ์ด์์ ๋ณ์๊ฐ ๊ด๊ณ๋๋ ๋ณต์กํ ํํ์์ ํํํ๊ธฐ๋ ํ๋ค. ๊ฐ ๋ ผ๋ฆฌ ์ฐ์ฐ์๋ ์ธ๋ถ ํญ๋ชฉ์์ ์ดํด๋ณผ ๊ฒ์ด๋ค. ๋ ผ๋ฆฌ ์ฐ์ฐ์๋ฅผ ์จ์ ํ ์ดํดํ๊ธฐ ์ํด์๋ 3.3์ ์์ ์ค๋ช ํ '์ฐธ์ด ๋๋(truthy) ํํ์' ๊ณผ '๊ฑฐ์ง์ด ๋๋(falsy) ํํ์'์ ๊ฐ๋ ์ ๋ค์ ํ๋ฒ ์ดํด๋ณผ ํ์๊ฐ ์๋ค.
4.10.1 ๋ ผ๋ฆฌ AND ( && )
&& ์ฐ์ฐ์๋ ํฌ๊ฒ ์ธ ๊ฐ์ง ์์ค์์ ์ดํดํ ์ ์๋ค. ์ฒซ ๋ฒ์งธ ์์ค์ ์์ฃผ ๋จ์ํ ๊ฒ์ผ๋ก, ์ฐ์ฐ์๊ฐ ๋ถ๋ฆฌ์ธ ํผ์ฐ์ฐ์์ ๋ํด ์ฐ์ผ ๊ฒฝ์ฐ์๋ ๋ ํผ์ฐ์ฐ์์ ๊ฐ์ ๋ํ ๋ถ๋ฆฌ์ธ AND๋ฅผ ์ํํ๋ค. ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์์ ๋ ๋ฒ์งธ ํผ์ฐ์ฐ์๊ฐ '๋ชจ๋' true์ผ ๊ฒฝ์ฐ์๋ง ์ฐ์ฐ ๊ฒฐ๊ณผ๋ก true๋ฅผ ๋ฐํํ๋ค. ์ ์ด๋ ํ๋ ์ด์์ ํผ์ฐ์ฐ์๊ฐ false๋ผ๋ฉด ์ฐ์ฐ ๊ฒฐ๊ณผ๋ก false๋ฅผ ๋ฐํํ๋ค. && ๋ ์ข ์ข ๋ ๊ด๊ณ ํํ์์ ์ ์์ฌ (conjunction)๋ก๋ ์ฐ์ธ๋ค.
x == 0 && y == 0 // x์ y๊ฐ ๋ชจ๋ 0์ด๋ฉด ์ฐธ์ด ๋๋ค.
๊ด๊ณ ํํ์์ ํญ์ true๋ false๋ก ํ๊ฐ๋๊ธฐ ๋๋ฌธ์, ์์ ๊ฐ์ด &&๋ฅผ ์ฌ์ฉํ๋ฉด ํญ์ true๋ false๋ฅผ ๋ฐํํ๊ฒ ๋๋ค. ๊ด๊ณ ์ฐ์ฐ์๋ && ์ || ๋ณด๋ค ์ฐ์ฐ์ ์ฐ์ ์์๊ฐ ๋๊ธฐ ๋๋ฌธ์, ์์ ๊ฐ์ ํํ์์ ๊ดํธ ์์ด๋ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง && ์ฐ์ฐ์์ ํผ์ฐ์ฐ์๋ก ๋ฐ๋์ ๋ถ๋ฆฌ์ธ ๊ฐ์ด ์ฌ ํ์๋ ์๋ค. ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ true๋ก ํ๊ฐ๋ ์ ์๊ฑฐ๋(truthy) false๋ก ํ๊ฐ๋ ์ ์์(falsy)์ ์๊ธฐํ์(3.3์ ์์ ์์ธํ ๋ค๋ฃจ๊ณ ์๋ค. false๋ก ํ๊ฐ๋๋ ๊ฐ์ false, null, undefined, 0, -0, NaN, ''(๋น๋ฌธ์์ด)์ด๋ค. ๊ฐ์ฒด๋ฅผ ๋น๋กฏํ ์ด ์ธ์ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ์ true๋ก ํ๊ฐ๋๋ค).
&& ์ฐ์ฐ์๋ฅผ ์ดํดํ๋ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ true๋ false๋ก ํ๊ฐ๋๋ ๊ฐ๋ค์ ์ํ ๋ถ๋ฆฌ์ธ AND ์ฐ์ฐ์๋ก์จ ์ดํดํ๋ ๊ฒ์ด๋ค. ํผ์ฐ์ฐ์ ๋ชจ๋ true๋ก ํ๊ฐ๋๋ ๊ฐ์ด๋ฉด, && ์ฐ์ฐ์๋ true๋ก ํ๊ฐ๋๋ ๊ฐ์ ๋ฐํํ๋ค. ํ์ง๋ง ์ ์ด๋ ํ๋์ ํผ์ฐ์ฐ์๊ฐ false๋ก ํ๊ฐ๋ ๊ฒฝ์ฐ์๋ false๋ก ํ๊ฐ๋๋ ๊ฐ์ ๋ฐํํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ถ๋ฆฌ์ธ ๊ฐ์ ์๊ตฌํ๋ ํํ์์ด๋ ๊ตฌ๋ฌธ์ 'truthy'ํ ๊ฐ์ด๋ 'falsy'ํ ๊ฐ๊ณผ๋ ์ ๋์ํ๋ค. ์ด๋ฌํ ์ด์ ๋ก &&๊ฐ ํญ์ true๋ false๋ฅผ ๋ฐํ ํ์ง ์๋๋ค๋ ์ฌ์ค์ด ์ค์ง์ ์ธ ๋ฌธ์ ๋ฅผ ์ผ์ผํค์ง๋ ์๋๋ค.
์ง๊ธ๊น์ง && ์ฐ์ฐ์๊ฐ 'true๋ก ํ๊ฐ๋๋ ๊ฐ' ๋๋ 'false๋ก ํ๊ฐ๋๋ ๊ฐ'์ ๋ฐํํ๋ค๊ณ ํ๋๋ฐ ์ ํํ ์ด๋ค ๊ฐ์ ๋งํ๋์ง ์ค๋ช ํ์ง ์์๋ค. ๊ทธ๋์ && ์ฐ์ฐ์๋ฅผ ์ดํดํ๋ ์ธ ๋ฒ์งธ ์์ค์ ๋ฐฉ๋ฒ์ ์ค๋ช ํด์ผ ํ๋ค. && ์ฐ์ฐ์๋ ์ข๋ณ์ ์๋ ์ฒซ ๋ฒ์งธ ํผ์ฐ์ฐ์์ธ ํํ์์ ๋จผ์ ํ๊ฐํ๋ค. ์ข๋ณ์ ๊ฐ์ด 'falsy'๋ฉด, ์ ์ฒด ํํ์์ ๊ฐ ์ญ์ 'falsy'์ฌ์ผ ํ๋ฏ๋ก, ๋จ์ํ ์ข๋ณ์ 'falsy'๊ฐ์ ๋ฐํํ๊ณ ์ฐ๋ณ์ ํํ์์ ํ๊ฐํ์ง ์๋๋ค.
๋ฐ๋๋ก, ๋ง์ฝ ์ข๋ณ์ ๊ฐ์ด 'truthy'๋ฉด ์ ์ฒด ํํ์์ ๊ฐ์ ์ฐ๋ณ ๊ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. ์ฐ๋ณ์ ๊ฐ์ด 'truthy'๋ฉด ์ ์ฒด ํํ์์ ๊ฐ๋ 'truthy'๊ณ , ๋ง์ฝ ์ฐ๋ณ์ ๊ฐ์ด 'falsy'๋ฉด ์ ์ฒด ํํ์์ ๊ฐ๋ 'falsy'๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ข๋ณ์ ๊ฐ์ด 'truthy'๋ฉด && ์ฐ์ฐ์๋ ํญ์ ์ฐ๋ณ์ ๊ฐ์ ํ๊ฐํ๊ณ ๋ฐํํ๋ค.
var o = { x : 1 }; var p = null; o && o.x // => 1: o๊ฐ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ o.x๋ฅผ ๋ฐํํ๋ค. p && p.x // => null: p๊ฐ null์ด๊ธฐ ๋๋ฌธ์ p.x๋ฅผ ํ๊ฐํ์ง ์๊ณ null์ ๋ฐํ
์ฌ๊ธฐ์ &&๊ฐ ์ฐ๋ณ ํํ์์ ํ๊ฐํ ์๋, ๋๋ ํ์ง ์์ ์๋ ์๋ค๋ ์ ์ ์ดํดํด์ผ๋ง ํ๋ค. ์ด ์ฝ๋์์ ๋ณ์ p๋ null์ด๊ธฐ ๋๋ฌธ์ ํํ์ p.x๊ฐ ํ๊ฐ๋๋ฉด TypeError๊ฐ ๋ฐ์ํ๋ค. ํ์ง๋ง ์ค์ ๋ก๋ && ์ฐ์ฐ์๋ p๋ฅผ ๋จผ์ ํ๊ฐํ๊ธฐ ๋๋ฌธ์, ํํ์ p.x๋ ๋ฐ๋์ p๊ฐ true๋ก ํ๊ฐ๋ ๋๋ง(๊ฐ์ด null์ด๋ undefined๊ฐ ์๋ ๋) ์คํ๋๋ค. ์ด์ ๊ฐ์ && ์ฐ์ฐ์์ ํน์ฑ์ '๋จ์ถ ํ๊ฐ(short circuiting)'๋ผ๊ณ ๋ถ๋ฅด๊ณ , ์ด์ ๊ฐ์ ํน์ฑ์ ์ผ๋ถ๋ฌ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ์ข ์ข ๋ณด๊ฒ ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์ ๋ ์ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ๋์ผํ๊ฒ ์๋ํ๋ค.
if ( a == b) stop(); // a == b๋ฅผ ๋ง์กฑํ ๋๋ง stop() ํจ์๋ฅผ ํธ์ถํ๋ค. ( a == b ) && stop(); // ์๋์ ์์ ๊ฐ๋ค.
์ผ๋ฐ์ ์ผ๋ก && ์ฐ๋ณ์ ๋ถ์ ํจ๊ณผ๊ฐ ์ผ์ด๋๋ ํํ์(ํ ๋น, ์ฆ๊ฐ, ๊ฐ์, ํจ์ ํธ์ถ)์ ์ฌ์ฉํ ๋๋ ๊ฐ๋ณํ ์ฃผ์ํด์ผ ํ๋ค. ์ด๋ฌํ ๋ถ์ ํจ๊ณผ๊ฐ ์ผ์ด๋๋ ํํ์์ && ์ข๋ณ ๊ฐ์ ๋ฐ๋ผ ์คํ ์ฌ๋ถ๊ฐ ๊ฒฐ์ ๋๋ค. ์ด ์ฐ์ฐ์๋ ์ค์ ์๋์ด ๊ฝค๋ ํผ๋์ค๋ฌ์ด ๋ฐฉ์์์๋ ๋ถ๊ตฌํ๊ณ , ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋จ์ํ ๋ถ๋ฆฌ์ธ ๋์ ์ฐ์ฐ์๋ค.
4.10.2 ๋ ผ๋ฆฌ OT ( || )