์ธํฐ๋ท ๊ฐ์ข๋ก๋ ์ดํด๊ฐ ์๋๋ ์ ๋ค์ด ๋ง์์ '์ธ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ' ebook์ ๊ตฌ์ ํด ๊ณต๋ถํ๋ค.
์ด ๊ธ์ ๊ณ ํ์ค, ์กํ์ฃผ ๋์ ์ธ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ์ฐธ์กฐํ์ฌ ์์ฑํ ๊ธ์ ๋๋ค.
#
JavaScript ๋ฐ์ดํฐ ํ์ ๊ณผ ์ฐ์ฐ์์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ๋ค์ ํฌ๊ฒ ๊ธฐ๋ณธ ํ์ ๊ณผ ์ฐธ์กฐ ํ์ ์ผ๋ก ๋๋๋ค.
๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์
์ซ์
๋ฌธ์์ด
boolean
null
undefined
์ฐธ์กฐ ๋ฐ์ดํฐ ํ์
๊ฐ์ฒด
๋ฐฐ์ด
ํจ์
์ ๊ทํํ์
๋ฐฐ์ด, ํจ์, ์ ๊ทํํ์์ด ๋ชจ๋ ๊ฐ์ฒด์ ์ํ๋ ๊ฐ๋ .
#
๊ธฐ๋ณธ ํ์๊ธฐ๋ณธ ํ์ ์ ํน์ง์ ๊ทธ ์์ฒด๊ฐ ํ๋์ ๊ฐ์ ๋ํ๋ธ๋ค๋ ๊ฒ
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์จํ ํ์ ์ฒดํฌ ์ธ์ด๋ค. C๋ Java ๋ฑ์ ์๊ฒฉํ ํ์ ์ฒดํฌ ์ธ์ด๋ ๋ณ์๋ฅผ ์ ์ธํ ๋ ๋ณ์์ ์ ์ฅํ ๋ฐ์ดํฐ ์ข ๋ฅ์ ๋ฐ๋ผ char, int, float ๋ฑ์ ์์ฝ์ด๋ฅผ ์ด์ฉํด์ ๋ณ์์ ๋ฐ์ดํฐ ํ์ ์ ์ง์ ํ๋ค.
๋ฐ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ณ์๋ฅผ ์ ์ธํ ๋ ํ์ ์ ๋ฏธ๋ฆฌ ์ ํ์ง ์๊ณ var (let, const) ๋ผ๋ ํ ๊ฐ์ง ํค์๋๋ก๋ง ๋ณ์๋ฅผ ์ ์ธํ๋ค.
var intNum = 10;var floatNum = 0.1;
var singleQuoteStr = 'Single quote string';var doubleQuoteStr = 'Double quote string';var singleChar = 'a';
var boolVar = true;
var emptyVar;
var nullVar = null;
console.log( typeof intNum, // number typeof floatNum, // number typeof singleQuoteStr, // string typeof doubleQuoteStr, // string typeof boolVar, // boolean typeof emptyVar, // undefined typeof nullVar, //object);
#
์ซ์์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋ชจ๋ ์ซ์๋ฅผ 64๋นํธ ๋ถ๋ ์์์ ํํ๋ก ์ ์ฅํ๋ค.
intNum๊ณผ floatNum ๋ณ์ ๋ชจ๋ typeof ์ฐ์ฐ์์ ๊ฒฐ๊ณผ๊ฐ์ด number ํ์ ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ ์ํ์ด ๋ฐ๋ก ์๊ณ ๋ชจ๋ ์ซ์๋ฅผ ์ค์๋ก ์ฒ๋ฆฌํ๋ฏ๋ก ๋๋์ ์ฐ์ฐ์ ํ ๋ 5/2 ์๊ฒฝ์ฐ 2๊ฐ ์๋๋ผ 2.5๊ฐ ์ถ๋ ฅ๋๋ค.
var num = 5 / 2;
console.log(num); // 2.5console.log(Math.floor(num)); // 2
#
๋ฌธ์์ด๋ฌธ์์ด์ ์์ ๋ฐ์ดํ๋ ํฐ ๋ฐ์ดํ๋ก ์์ฑํ๋ค. typeof์ ๊ฒฐ๊ณผ๋ string์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ C์ธ์ด์ char ํ์ ๊ณผ ๊ฐ์ด ๋ฌธ์ ํ๋๋ง์ ๋ณ๋๋ก ๋ํ๋ด๋ ๋ฐ์ดํฐํ์ ์ ์กด์ฌํ์ง ์๋๋ค.
์ฃผ์ํด์ผํ ์ ์ ํ ๋ฒ ์ ์๋ ๋ฌธ์์ด์ ๋ณํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค. (immutable)
#
๋ถ๋ฆฐ๊ฐtrue, false๋ฅผ ๋ํ๋ด๋ ๋ถ๋ฆฐ ํ์ ์ด๋ค.
#
null๊ณผ undefined์ด ๋ ํ์ ์ ๋ชจ๋ '๊ฐ์ด ๋น์ด์์'์ ๋ปํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํ๊ฒฝ ๋ด์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ด ํ ๋น๋์ง ์์ ๋ณ์๋ undefined ํ์ ์ด๋ฉฐ , undefined ํ์ ์ ๋ณ์๋ ๋ณ์ ์์ฒด์ ๊ฐ ๋ํ undefined์ด๋ค. ์ด์ฒ๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์์ undefined๋ ํ์ ์ด์, ๊ฐ์ ๋ํ๋ธ๋ค
null ํ์ ๋ณ์์ ๊ฒฝ์ฐ๋ ๊ฐ๋ฐ์๊ฐ ๋ช ์์ ์ผ๋ก ๊ฐ์ด ๋น์ด์์์ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉํ๋ค .
์ฃผ์ํ ์ ์ null ํ์ ๋ณ์์ typeof ๊ฒฐ๊ณผ๊ฐ null์ด ์๋๋ผ object๋ผ๋ ๊ฒ์ด๊ณ ๋ฐ๋ผ์ null ํ์ ๋ณ์์ธ์ง ํ์ธํ ๋ typeof ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๊ณ , ์ผ์น ์ฐ์ฐ์ (===)๋ฅผ ์ฌ์ฉํด์ ๋ณ์์ ๊ฐ์ ์ง์ ํ์ธํด์ผ ํ๋ค.
var nullVar = null;
console.log(typeof nullVar === null);console.log(nullVar === null);
#
์ฐธ์กฐ ํ์ (๊ฐ์ฒด ํ์ )์๋ฐ์คํฌ๋ฆฝํธ์์ ์ซ์, ๋ฌธ์์ด, boolean, null, undefined ๊ฐ์ ๊ธฐ๋ณธ ํ์ ์ ์ ์ธํ๋ชจ๋ ๊ฐ์ ๊ฐ์ฒด๋ค.
๋ฐ๋ผ์ ๋ฐฐ์ด, ํจ์, ์ ๊ทํํ์ ๋ฑ๋ ๋ชจ๋ ๊ฒฐ๊ตญ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ก ํํ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ฒด๋ ๋จ์ํ '์ด๋ฆ(key):๊ฐ(value)' ํํ์ ํ๋กํผํฐ๋ค์ ์ ์ฅํ๋ ์ปจํ ์ด๋๋ก์, ์ปดํจํฐ ๊ณผํ ๋ถ์ผ์์ ํด์(hash)๋ผ๋ ์๋ฃ๊ตฌ์กฐ์ ์๋นํ ์ ์ฌํ๋ค.
๊ฐ์ฒด๋ ์ฌ๋ฌ ๊ฐ์ ํ๋กํผํฐ๋ฅผ ํฌํจํ ์ ์์ผ๋ฉฐ, ๊ธฐ๋ณธ ํ์ ์ ๊ฐ์ ํฌํจํ๊ฑฐ๋ ๋ค๋ฅธ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํฌ ์๋ ์๋ค. ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ํจ์๋ก ํฌํจํ ์ ์์ผ๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ด๋ฌํ ํ๋กํผํฐ๋ฅผ ๋ฉ์๋๋ผ๊ณ ๋ถ๋ฅธ๋ค.
#
๊ฐ์ฒด ์์ฑ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ ์ธ ๊ฐ์ง๊ฐ ์๋ค.
- Object() ์์ฑ์ ํจ์ ์ด์ฉ
var foo = new Object();
foo.name = 'foo';foo.age = 30;foo.gender = 'male';
console.log(typeof foo); // objectconsole.log(foo); // { name: 'foo', age: 30, gender: 'male' }
- ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์ ์ด์ฉ
var foo = { name: 'foo', age: 30, gender: 'male',};
console.log(typeof foo); // objectconsole.log(foo); // { name: 'foo', age: 30, gender: 'male' }
์ค๊ดํธ๋ฅผ ์ด์ฉํด์ ์์ฑ, {} ์์ ์๋ฌด๊ฒ๋ ์ ์ง ์์ ๊ฒฝ์ฐ ๋น ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค.
- ์์ฑ์ ํจ์ ์ด์ฉ
์์ฑ์ ํจ์๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ๋ค์์ ๋ค๋ฃฌ๋ค.
#
๊ฐ์ฒด ํ๋กํผํฐ ์ฝ๊ธฐ/์ฐ๊ธฐ/๊ฐฑ์๊ฐ์ฒด ํ๋กํผํฐ์ ์ ๊ทผํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ
๋๊ดํธ (
[]
) ํ๊ธฐ๋ฒ๋ง์นจํ (
.
) ํ๊ธฐ๋ฒ
var foo = { name: 'foo', major: 'computer science',};
// ๊ฐ์ฒด ํ๋กํผํฐ ์ฝ๊ธฐconsole.log(foo.name); // fooconsole.log(foo['name']); // fooconsole.log(foo.nickname); // undefined
// ๊ฐ์ฒด ํ๋กํผํฐ ๊ฐฑ์ foo.major = 'electronics engineering';console.log(foo.major); // electronics engineering
foo['major'] = 'digital media';console.log(foo['major']); // digital media
// ๊ฐ์ฒด ํ๋กํผํฐ ๋์ ์์ฑfoo.age = 30;console.log(foo.age); // 30
foo['gender'] = 'male';console.log(foo['gender']); // male
๋๊ดํธ ํ๊ธฐ๋ฒ์ ๊ฒฝ์ฐ ์ ๊ทผํ๋ ค๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ๋ฌธ์์ด ํํ๋ก ๋ง๋ ๋ค์ ๋๊ดํธ๋ก ๋๋ฌ์ธ์ผ ๋๋ค.
๋ง์ฝ ๋ฌธ์์ด ํํ๋ก ๋ง๋ค์ง ์๊ณ foo[name]
๋ก ์ ๊ทผํ๋ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ name
์ด๋ผ๋ ๋ณ์ ๋๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์ toString()
๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ฌธ์์ด๋ก ๋ฐ๊พธ๋ ค๋ ์๋๋ฅผ ํ๋ค.
๋๊ดํธ ํ๊ธฐ๋ฒ ๋ง์ ์ฌ์ฉํด์ผํ๋ ๊ฒฝ์ฐ ์ ๊ทผํ๋ ค๋ ํ๋กํผํฐ๊ฐ ํํ์์ด๊ฑฐ๋ ์์ฝ์ด์ผ ๊ฒฝ์ฐ, ๋๊ดํธ ํ๊ธฐ๋ฒ๋ง์ ์ด์ฉํด์ ์ ๊ทผํด์ผ ํ๋ค. ex)
foo['full-name']
#
๊ฐ์ฒด ์์ฑ ์ด๋ฆ ์ง๊ธฐ์ ํ๊ธฐ๋ฒ์ผ๋ก ์ ๊ทผํ๊ธฐ ์ํด์๋ ์์ฑ์ ์ด๋ฆ์ด ์๋ณ์ ๊ท์น์ ๋ฐ๋ผ์ผ ํ๋ค. ์๋ณ์๊ท์น์ ๋ฐ๋ฅผ ๊ฒฝ์ฐ ์์ฑ์ ์ด๋ฆ์ ''
๋ก ๊ฐ์ธ์ง ์์๋ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์๋ณ์ ์ฝ๋ ๋ด์ ๋ณ์, ํจ์, ์์ฑ์ ์๋ณํ๋ ๋ฌธ์์ด๋์๋ฌธ์๋ฅผ๊ตฌ๋ณํ๋ฉฐ ์ ๋์ฝ๋ ๊ธ์,
$
,_
,์ซ์(0-9)๋ก ๊ตฌ์ฑํ ์ ์์ง๋ง, ์ซ์๋ก ์์ํ ์๋ ์๋ค.
๋๊ดํธ ํ๊ธฐ๋ฒ์์๋ ๋ฌธ์์ด์ด๋ Symbol์ ์์ฑ์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ ์ ์๊ณ , ์ ํจํ์๋ณ์๊ฐ ์๋์ด๋ ๋๋ค. 1foo
, !bar!
, ์ฌ์ง์ด ๊ณต๋ฐฑ ๋ ๊ฐ๋ฅํ๋ค.
๋๊ดํธ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ ๋๋ foo['name']
์ฒ๋ผ ' '
๋ก ๊ฐ์ธ์ฃผ์ด์ผ ํ๋ค.
๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ค์ง ์ซ์๋ก ๊ตฌ์ฑ๋ ์์ฑ ์ด๋ฆ์ด
' '
๋ก๊ฐ์ธ์ง ์์๋ ๊ฐ๋ฅํ๋ฐ (์๋ณ์ ๊ท์น์ ์ด๊ธ๋จ.) ์ด ์ด์ ๋ ์์ง ์ ๋ชจ๋ฅด๊ฒ ์. ์ซ์๊ฐ ๋ฌธ์์ด๋ก ๋ฐ๋๋ ํน์ง์ด ์๋ ๊ฒ ๊ฐ์. ์ด ๊ฒฝ์ฐ ์ ํ๊ธฐ๋ฒ์ผ๋ก๋ ์ ๊ทผํ ์ ์๊ณ , ๋๊ดํธ ํ๊ธฐ๋ฒ์์๋foo['์ซ์']
์foo[์ซ์]
๋ชจ๋ ์ ๊ทผ ๊ฐ๋ฅํจ.
#
์ฐธ๊ณ ์๋ฃ๐MDN web docs - ์์ฑ ์ ๊ทผ์
๐JavaScript Object['key'] vs Object.key ์ฐจ์ด