Variable, rw (read / write)
: ๋ณ์
: ๋ณ๊ฒฝ๋ ์ ์๋ ๊ฐ
: let์ ๋ง์ด ์
let name = 'ellie';
- ํด์: let์ด๋ผ๋ ํค์๋ ์ด์ฉํด์ name์ด๋ผ๋ ๋ณ์๋ฅผ ์ ์ธ(declaration)ํ๊ณ ellie๋ผ๋ ๋ณ์์ ๊ฐ์ ํ ๋นํ๋ค.
name = 'hello';
- ํด์: ๋ค์ name ์ด๋ผ๋ ๋ณ์์ hello ๋ผ๋ ๊ฐ์ ํ ๋นํ๋ฉด console์๋ ellie์ hello๊ฐ ๋๋ํ ์ถ๋ ฅ๋๋ค.
๋ณ์๊ฐ ์ฐ์ด๋ ์๋ฆฌ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฐ๊ฒ ๋๋ฉด, ์ดํ๋ฆฌ์ผ์ด์ ๋ง๋ค ์ธ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋์ด์ง๋ค. ์ด ๋ฉ๋ชจ๋ฆฌ๋ ํ ํ ๋น์ด์๋ ๋ฐ์ค๋ค์ธ๋ฐ let์ด๋ผ๋ ํค์๋๋ฅผ ์ด์ฉํด์ name์ด๋ผ๋ ๋ณ์๋ฅผ ์ ์ํ๊ฒ๋๋ฉด ํ๊ฐ์ง์ ๋ฐ์ค๋ฅผ ์ ์ํ ์ ์๋ ํฌ์ธํฐ๊ฐ ์๊น. name์ด๋ผ๋ ๋ณ์๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ค ์ด๋๊ฐ์ ellie๋ผ๋ ๊ฐ์ ์ ์ฅํ ์ ์์. ์ถํ์ name์ด ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฐ์ ๋ค๋ฅธ ๊ฐ(hello)๋ฅผ ์ ์ฅํ ์ ์๋ ๊ฒ. |
Block scope
: ๊ดํธ (๋ธ๋ญ)๋ฅผ ์ด์ฉํด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ธ๋ญ ๋ฐ์์๋ ์์ ๋ด์ฉ์ ๋ณผ ์ ์๋ค.
๋ฐ๋ผ์ ๋ธ๋ญ ๋ฐ์์ console.log(name); ์ ์ ์ด ์ ๊ทผํ๊ฒ๋๋ฉด ์๋ฌด ๊ฐ๋ ๋์ค์ง ์๋๋ค.
global scope
- ๋ฐ๋๋ก ๋ธ๋ญ์ ์ฐ์ง์๊ณ ํ์ผ ์์ ์ ์ํด์ ์ฐ๋ ๋ณ์๋ฅผ global scope์ด๋ผ๊ณ ํ๋๋ฐ ์ด๋ ๊ณณ์์๋ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
๋ธ๋ญ ๋ฐ์์๋, ์์์๋ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ฝ์์์ ๋๋ค ์ถ๋ ฅ๋จ.
===> global ๋ณ์๋ค์ ์ดํ๋ฆฌ์ผ์ด์
์ ์์๋ถํฐ ๋๋ ๋๊น์ง ํญ์ ๋ฉ๋ชจ๋ฆฌ์ ํ์ฌ๋ผ ์์ด์ ์ต์ํ์ผ๋ก ์จ์ผํจ. (class, if, for, ํจ์ ๋ฑ ํ์ํ ๋ถ๋ถ์์๋ง ์ฐ๋ ๊ฒ์ด ์ข๋ค)
<JS์์ ๋ณ์ ์ ์ธ ํค์๋>
๋ฑํ๋!
let
๊ทธ ์ ์๋ var ์ ์ผ๋ค.
* var์ ์ฐ๋ฉด ์๋๋ ์ด์ ?
1. var hoisting : move delaration from bottom to top 2.has no block scope |
1. var hoisting
- ๋๋ถ๋ถ์ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋ณ์ ์ ์ธ ํ ๊ฐ์ ํ ๋นํ๋ ๊ฒ ์ ์์ .
var age;
age = 4;
ํ์ง๋ง ์ ์ธ๋ ํ๊ธฐ ์ ์ ๊ฐ์ ํ ๋นํ ์ ์๊ณ
age = 4;
var age;
๊ฐ์ ํ ๋นํ๊ธฐ ์ ์๋ ์ถ๋ ฅํ ์ ์๋ค.
console.log(age);
age = 4;
var age;
===> undefined๋ก ๋์จ๋ค.( ๋ณ์๋ ์ ์๋ผ์์ง๋ง ๊ฐ์ด ์์ง ์๋ค์ด๊ฐ์๋ค.) ๊ทธ๋์
console.log(age);
age = 4;
console.log(age); (๊ฐ์ ํ ๋น)
var age;
===> ๊ฐ์ ํ ๋นํ ํ ์ถ๋ ฅํ๋ฉด 4๋ก ๋์จ๋ค.
๋ง์ฝ var์ด ์๋ let์ ์ฌ์ฉํ๋ค๋ฉด ์๋ฌ๊ฐ ๋ฌ๋ค. (์ ์์ )
์ ์ธํ๊ธฐ๋ ์ ์ ๊ฐ์ ํ ๋นํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง var์ ์ ์ธํ๊ธฐ ์ ์ ๊ฐ์ ํ ๋นํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ var hoisting ์ด๋ผ๊ณ ํ๋ค.
* var hoising : ์ด๋์ ์ ์ธํ๋์ง ์๊ด์์ด ํญ์ ์ ์ผ ์๋ก ์ ์ธ์ ๋์ด์ฌ๋ ค์ฃผ๋ ๊ฒ์ ์๋ฏธํ๋ค. |
- global scope์ ์ด์ฉํด์ ์ ์ธํ๊ธฐ๋๋ฌธ์ ํ์ผ ์ ์ผ ์์ ์ ์ธ์ด ์ฌ๋ผ๊ฐ๊ฒ๋๋ค.
+ console.log(age);
- age๋ฅผ ์ถ๋ ฅํ๊ฒ๋๋ฉด undefined๋ก ๋์จ๋ค.
2. has no block scope
: var์ ๋ธ๋ญ์ ์ฒ ์ ํ ๋ฌด์ํ๋ค.
age๋ผ๋ ๋ณ์๋ฅผ ๋ธ๋ญ ์์์ ์ ์ธํ์์๋ ๋ถ๊ตฌํ๊ณ ์ฝ์์ ์ด์ฉํด age๋ฅผ ๋ฐ์์ ์ถ๋ ฅํ๊ฒ๋๋ฉด ์ ์์ ์ผ๋ก ๋์จ๋ค.
์๋ฌด๋ฆฌ ๋ธ๋ญ์ ์ด์ฉํด ๋ณ์ ์ ์ธํด๋ ์ด๋์์๋ ๋ณด์ผ ์ ์์.
์ด์ฐฝ๊ธฐ์๋ ์ด๋ฐ ์ ์ฐ์ฑ์ ์ด์ฉํด์ ๋์ถฉ ๋์ํ๋ ์ดํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค์์ง๋ง ์ด๋์ ๋ ๊ท๋ชจ์๋ ํ๋ก์ ํธ๋ฅผ ํ๋ค๋ณด๋ฉด ์ ์ธํ์ง๋ ์์ ๊ฐ๋ค์ด ํ ๋น๋์ด์ด. ์ด๋ฐ ์ํ๋ถ๋ด๋๋ฌธ์ let์ ์จ์ผํ๋ค.
===> ํธํ์ฑ ์๊ฐํด๋ดค์ ๋ es6๋ ๋ฉ์ด์ ๋ธ๋ผ์ฐ์ ์์ ๋ค ์ง์๋๊ธฐ๋๋ฌธ์ ์์ฌํ๊ณ ์จ๋๋จ.
constant, r(read only)์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๊ณ ๋ค๋ฅธ ๊ฐ์ ์ฐ๋๊ฒ ๋ถ๊ฐ๋ฅ
: favor immutable data type always for a few reasons:
-security ๋ณด์์ (ํด์ปค๋ค์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฟ ์ ์์)
-thread safety (์ดํ๋ฆฌ์ผ์ด์
์ ํจ์จ์ ,๋น ๋ฅด๊ฒ ๋๋ฆด ์ ์์)
-reduce human mistakes(๊ฐ์ ๋ฐ๊พผ๋ค๋ ๊ฒ์ ์ํํ ๊ฒ์ด๊ธฐ๋๋ฌธ์ ์๋ณํ๋๊ฒ ์ข๋ค ๋ณ๊ฒฝํด์ผํ ์ด์ ๊ฐ ์์ผ๋ฉด const๋ฅผ ์ฌ์ฉํ ๋๊ฒ ์ข๋ค)
: ํ ๋นํ๋ฉด ๊ฐ์ด ๋ฐ๋์ง์์. (์ ๊ธ)
: ๊ฐ์ ์ ์ธํจ๊ณผ ๋์์ ์ ๋๋ก ๊ฐ์ด ๋ณ๊ฒฝ๋ ์ ์์.
๋ฐ์ดํฐ ํ์ ์ mutable / immutable 2๊ฐ์ง๊ฐ ์๋ค.
mutable data types | immutable data types |
๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ ๋ฐ์ดํฐํ์ | ๊ฐ์ด ์ ๋๋ก ๋ฐ๋์ง ์๋ ๊ฒ. |
= object (์ค์ค๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ) - JS์์ ๋ชจ๋ object๋ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค ex) - JS์์ array(๋ฐฐ์ด)์ mutable data type. |
- primitive types ex) ellie๋ผ๋ string์ ์ ๋ฆฌํ๊ฒ ๋๋ฉด ellie๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํต์งธ๋ก ์ฌ๋ ธ๋ค๊ฐ ๋ค๋ฅธ string์ผ๋ก ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ์ง, ellie์์ i๋ฅผ ๋นผ๊ณ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ฐ๊พผ๋ค๋์ง ๋ฐ์ดํฐ ์์ฒด ๋ณ๊ฒฝx. -frozen objects : ๋ณ๊ฒฝX |
JavaScript ๋ณ์ ์ ์ธ | |
Mutable (๋ฐ๋๋๊ฒ) | Immutable (๋ฐ๋์ง ์๋๊ฒ) |
let | const |
Variable types (2๊ฐ์ง)
primitive (Variable๋ก ๊ฐ์ด ์ ์ฅ๋จ) | object (object๋ก ๊ฐ์ด ์ ์ฅ๋จ) |
- single item(๋ ์ด์ ๋๋ ์ง ์ ์๋ ํ ๊ฐ์ง ์์ดํ
) - ๊ฐ ์์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋จ |
box container(์ฑ๊ธ์์ดํ
๋ค์ ํ๋ฐ์ค๋ก ๊ด๋ฆฌํด์ฃผ๋ ๊ฒ) - ๋๋ฌด ์ปค์ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ฒ์ ์ฌ๋ผ๊ฐ ์ ์์. object๋ฅผ ๊ฐ๋ฆฌํค๋ ref๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ค. |
-number -string -boolean -null -undefined -symbol |
-function -first-class function (๋ป: ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ function ๋ ๋ค๋ฅธ ๋ฐ์ดํฐํ์ ์ฒ๋ผ ๋ณ์์ ํ ๋น ๊ฐ๋ฅํ๊ณ ํจ์์ parameter(์ธ์)๋ก๋ ์ ๋ฌ๋๊ณ returnํ์ ์ผ๋ก๋ function์ returnํ ์ ์๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค) |
C์ธ์ด (์ข ๋ ์ธ์ธํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ฐ๋ฅ)
-short / int / long (์ซ์ ํ ๋นํ ๋), float / double (์์์ ํ ๋นํ ๋) ๋ฑ ๋ค์ํจ. ์ผ๋ง๋ ํฐ ์ฌ์ด์ฆ๋ฅผ ๋ด๋๋์ ๋ฐ๋ผ ๋ฐ์ดํฐํ์
์ ๋ค ๋ค๋ฅด๊ฒ ์จ์ผํ๋ค.
Java์์๋ ์ซ์์ ๊ด๋ จ๋ ๋ฐ์ดํฐํ์
์ด ๋ง๋ค.
.
.
.
primitive
1. number
ํ์ง๋ง JS์์๋ number๋ง ์ฌ์ฉํ๋ฉด ๋!!
JS์์๋ number์ ์ธ ์ํด๋ ๋จ(ํ์
์ด ๋ค์ด๋๋ฏนํ๊ฒ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ)
let a = 12;
let b = 1.2;
์ด๋ค ์ซ์๋ ํ ๋นํ๋ฉด ๋.
์์ง ๋ฐฐ์ฐ์ง ์์์ง๋ง TS(Time Script)์์๋ number์ ์ด๋ค. let a: number = 12; let b: number = 1.2; ===> ์ด๋ฐ๊ฒ ์๊ตฌ๋ ์์๋ง๋๊ธฐ. |
JS์์๋
integer :์ ์
decimal number: ์์์
===>number type์ผ๋ก ํ ๋น๋๋ค.
Special numeric values : infinity, -infinity, NaN
: number์์๋ ํน๋ณํ ๊ฐ์ด ์ ์ฉ๋ผ์๋ค.
1. infinity
: ์ซ์๋ฅผ 0์ผ๋ก ๋๋๋ฉด ๋ฌดํ๋(infinity)๊ฐ ๋๋ค.
2. negative infinity
: ๋ง์ด๋์ค ๊ฐ(negative value)์ 0์ผ๋ก ๋๋๋ฉด negative infinity๊ฐ์ด ๋์จ๋ค.
3. NaN (not a number)
: ์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ. ์ซ์๊ฐ ์๋ string์ ์ซ์๋ก ๋๋๋ฉด NaN๊ฐ์ด ๋์ค๊ฒ๋๋ค.
๋ค์ํ ๊ณ์ฐ ํด์ผ๋ ๋ ๋๋์ด์ผ ํ๋ ๊ฐ์ด 0์ธ์ง ์๋์ง ์ซ์์ธ์ง ์๋์ง ๋ชจ๋ฅด๊ณ ์ฐ์ฐ์ ํ๋ฉด ์ซ์๊ฐ ์๋ Infinity, -Infinity, NaN๊ฐ ๋์ ์ฌ์ฉ์์๊ฒ ์๋ฌ๋ ์ ์์. ์ฐ์ฐํ ๋ ๊ทธ ๊ฐ์ด validํ ๊ฐ์ธ์ง ํ์ธํด์ผํ๋ค.
* bigInt
- JS์ number๋ -2์ 53์น๋ถํฐ 2์ 53์น๊น์ง ๊ฐ๋ฅ(ํ๊ธฐ: -2**53 ~ 2*53)
- ์ต๊ทผ์๋ bigInt ๋ผ๋๊ฒ ์ถ๊ฐ๋์๋ค. ์ซ์์ ๋ง์ง๋ง์ n๋ง ๋ถ์ด๋ฉด bigInt๋ก ๊ฐ์ฃผ๋จ
ex) const bigInt = 12345678912345678945615234789465n;
===> chrome, firefox์์๋ง ์ธ์๋จ.(๋ค๋ฅธ๋ธ๋ผ์ฐ์ ์ง์X) ๋ง์ด ์ฐ์ง๋ ์์ ๊ฒ์ผ๋ก ์์๋์ง๋ง ์์๋ง๋๊ธฐ
2. string (๋ฌธ์์ด)
1. ํ ๊ฐ์ง ๊ธ์๋ ์ฌ๋ฌ๊ฐ ๊ธ์๋ , string ํ์ ์ผ๋ก ํ ๋น๋๋ค.
ex)
const char = 'c';
const brendan = 'brendan';
2 . ์ผ๋ฐ string๊ณผ +๊ธฐํธ๋ฅผ ์ด์ฉํด string์ ๊ณ ์น ์ ์๋ค.
ex)
const greeting = 'hello' + brendan;
- string์ด ์ฐ๊ฒฐ๋์ด ๋์ด.
3. template literals ๋๋ template string (๋ง์ด์ฐ์)
๋ฌธ๋ฒ:
'hi ${brendan}!';
โ์ํ๋ string(hi)์ ์ ๊ณ ๋ฌ๋ฌ์ ๊ฐ์ ์ ๊ณ ๊ทธ ์์ ๊ดํธ์ ๋ณ์(brendan)์ ์ฐ๋ฉด ๊ทธ ๋ณ์์ ๊ฐ์ด ์๋์ ์ผ๋ก ๋ถ์ฌ์ ธ์ ๋์ด
ex)
const helloBob = 'hi ${brendan}!';
(์๋) +๊ธฐํธ๋ฅผ ์ผ์ ๋ ๋ฒ๊ฑฐ๋กญ๋ค ( ์ฝํธ('')์ ๋ฃ์ด์ ํ๋ฌ์คํ๊ณ ๋ ์ฝํธ์ ๋ฃ์ด์ ํ๋ฌ์ค... ๋ฐ๋ณต..)
(์) ``(back tick;๋นฝํฑ, ๋ฐฑํฑ)์ ์ด์ฉํ๋ฉด ๊ฐํธํ๊ฒ ๋ง๋ค ์ ์๋ค.
3. Boolean
: false: -, null, undefined, NaN, ' '
: true: any other value (1์ด๋ string ๊ฐ)
ex)
const canRead = true;
const test = 3 < 1; // false
4. Null
: empty๊ฐ ์ง์ ํด์ฃผ๋ ๊ฒ
ex)
let nothing = null;
5. undefined
: ์ ์ธ์ ๋์ง๋ง ์๋ฌด๊ฒ๋ ๊ฐ์ด ์ง์ ๋ผ์์ง ์๋๋ค.
ex)
let x; OR let x = undefined;
: ๋ ๋ค ๋๊ฐ์ ์๋ฏธ
6. symbol
: ์๋ฃ๊ตฌ์กฐ์์ ๊ณ ์ ์๋ณ์ ํ์ํ๊ฑฐ๋, ๋์๋ค๋ฐ์ ์ธ ์ฝ๋์์ ์ฐ์ ์์ ์ฃผ๊ณ ์ถ์ ๋ ๊ณ ์ ํ ์๋ณ์๋ก ํ์ํ ๋ ์ฐ์.
: ๊ฐํน ์๋ณ์๋ฅผ string์ด์ฉํด ์ฐ๋๊ฒฝ์ฐ์์. ๋ค๋ฅธ ๋ชจ๋ ๋ค๋ฅธ ํ์ผ์์ ๋์ผํ string์ ์ผ์๋ ๋์ผํ ์๋ณ์๋ก ๊ฐ์ฃผ๋จ.
: ๋ฐ๋๋ก symbol์๊ฒฝ์ฐ, ๋์ผํ id๋ฅผ ์ด์ฉํด symbol์ ๋ง๋ค์์ง๋ง ์ด 2๊ฐ์ง์ ์ฌ๋ณผ์ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ค.
: ๋์ผํ์ง ์๋์ง ๊ฒ์ฌํด๋ณด๋ฉด ๋์ผํ๊ฒ ์๋๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค. (์๋ ์ฌ์ง ์ฐธ๊ณ )
- ๋๊ฐ์ด ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ์ด๋ ๊ฒ.
+์ฌ๋ณผ์ ๋ฐ๋ก ์ถ๋ ฅํ๋ฉด ์๋ฌ๋ฐ์. ํญ์ .description ์ด์ฉํด string์ผ๋ก ๋ณํํด์ผํ๋ค.
object
: ์ผ์์ ๋ฌผ๊ฑด, ๋ฌผ์ฒด๋ฅผ ๋์ฒดํ ์ ์๋ ๋ฐ์ค ํํ
: ๊ทธ๋ฅ ๋ณ์ name, age๋ ์๋ฌด๊ฒ๋ ์ค๋ช ๋์ง ์์ง๋ง ellie๋ผ๋ objec๋ฅผ ๋ง๋ค๊ณ , 20์ด์ด๋ผ๋ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค ์ ์๋ค.
ex)
const ellie = { name: 'ellie', age: 20};
- ellie๋ const๋ก ์ง์ ๋ผ์์ด ๋ค๋ฅธ ์ค๋ธ์ ํธ๋ก ๋ณ๊ฒฝX. ๋์ name, age๋ ๋ณ๊ฒฝ๊ฐ๋ฅ
const ellie = { name: 'ellie', age: 20};
ellie.age = 21;
- ellie์ ๋์ด๋ 21์ด๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ
Dynamic typing
: c์ธ์ด, Java - ๋ณ์ ์ ์ธํ ๋ ํ์ ์ ์ ์ธํจ
:JavaScript - ์ ์ธํ ๋ ํ์ ์ ์ธX, ๋์ํ ๋ ํ ๋น๋ ๊ฐ์ ๋ฐ๋ผ ํ์ ์ด ๋ณ๊ฒฝ๋ ์ ์์.
์ข์ ์์ด๋์ด์์๋ ๋น ๋ฅด๊ฒ ํ๋กํ ํ์ ์ ๋์๋จ.
but ๊ท๋ชจ์๋ ํ๋ก์ ํธ๋ง๋ค๋ ๋ฐ๋ฑ์ ๋ถ๋ฅ๋จ์ด์ง์ ์๋ค.
'๐Development > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] Arrow Function์ ๋ฌด์์ธ๊ฐ? ํจ์์ ์ ์ธ๊ณผ ํํ (0) | 2023.03.13 |
---|---|
[JS] operator(์ฐ์ฐ์), if, switch, for loops ์ฝ๋ (0) | 2023.03.13 |
[JS] ์ฝ์์ ์ถ๋ ฅ, script async ์ defer์ ์ฐจ์ด์ (0) | 2023.03.12 |
[JS] JavaScript์ ์ญ์ฌ, ํ์ฌ ๊ทธ๋ฆฌ๊ณ ๋ฏธ๋ (0) | 2023.03.11 |
[JS] UI vs API & ๋ง๋ฌด๋ฆฌ (0) | 2023.03.06 |