λ°μ΄ν° νμ
Variable
μ΄ν리μΌμ΄μ μ μ€ννκ² λλ©΄, μ΄ν리μΌμ΄μ λ§λ€ μΈ μ μλ λ©λͺ¨λ¦¬κ° ν λΉλλ€. μ΄ λ©λͺ¨λ¦¬λ ν ν λΉ λ°μ€λ€μΈλ°, μ΄ν리μΌμ΄μ λ§λ€ κ·Έ λ°μ€μ κ°―μκ° μ νμ μΌλ‘ ν λΉλλ€. let name μ΄λΌλ ν€μλλ‘ λ³μλ₯Ό μ μνλ©΄, νκ°μ§μ λ°μ€λ₯Ό κ°λ¦¬ν¬ μ μλ ν¬μΈν°κ° μκΈ΄λ€ nameμ΄λΌλ λ³μκ° κ°λ¦¬ν€κ³ μλ μ΄λκ°μ JeenieλΌλ κ°μ μ μ₯ν μ μμ μΆνμ κ°λ¦¬ν€κ³ μλ κ³³μ λ€λ₯Έκ°μ λ£μ΄ μ μ₯ν μ μμ
Block scopeμ Global scope
block scope
{Β } μ΄λ κ² λΈλ μμμ μ μΈλ λ³μλ€. λΈλ μμμ μ μΈλ μ΄ nameμ΄λΌλ λ³μλ₯Ό λ°μμ μ κ·Όνκ² λλ©΄ μ무κ°λ λμ€μ§μμ
- λΈλ λ°μμλ μ κ·Όν μ μλ€!
global scope
{ } λΈλμ μ°μ§ μκ³ νμΌ μμ λ°λ‘ μ μν΄μ μ°λ λ³μλ€.
- λΈλ λ°μμλ μ κ·Ό κ°λ₯νκ³ , λΈλ μμμλ μ κ·Ό κ°λ₯νλ€
=> global λ³μλ μ΄ν리μΌμ΄μ μ€νλ μκ°λΆν° λκΉμ§ νμ λ©λͺ¨λ¦¬μ νμ¬λμ΄ μκΈ° λλ¬Έμ, μ΅μνμΌλ‘ μΈ κ². κ°λ₯νλ©΄ classλ ν¨μ, ifλ for 루ν λ± νμν λΆλΆμμλ§ μ μν΄μ μ°λ κ²μ΄ μ’λ€.
let
letμ es6μ μΆκ°λ¨. mutable data type
- varλ μ°μ§ λ§ κ²!
μ°λ©΄ μλλ μ΄μ
- λλΆλΆ νλ‘κ·Έλλ° μΈμ΄μμλ λ³μλ₯Ό μ μΈν νμ κ°μ ν λΉν¨ νμ§λ§ JS varμμλ μ μΈλ νκΈ°μ μ κ°μ ν λΉν μ μμ(λ―ΈμΉνλ) μ΄κ²μ var hoisting μ΄λΌκ³ ν¨ (hoistingμ΄λ? μ΄λμ μ μΈνλλμ μκ΄μμ΄ μ μΌ μλ‘ λμ΄μ¬λ €μ£Όλ κ²μ λ§ν¨)
- varλ block scopeμ μ² μ νκ² λ¬΄μνλ€! block scope μμμ varλ‘ μ μΈν λ³μμΈλ° λ°μμ νΈμΆμ΄ κ°λ₯ν¨. (μ무리 κΉμ κ³³μ μ μΈμ νλ€κ³ ν΄λ μ΄λμμλ νΈμΆν μκ° μμ΄μ, κ·λͺ¨κ° ν° νλ‘μ νΈμμ μ μΈνμ§λ μμ κ°λ€μ΄ ν λΉλμ΄μ μ€κΈ°λ ν¨.)
=> μ΄λ¬ν μνμ± λλ¬Έμ var λμ letμ μ¨μΌν¨!
constants
- es6μμ μΆκ°λ¨. immutable data type
- κ°μ νλ² ν λΉνλ©΄ μ λ λ°λμ§ μμ.
- κΈ°μ‘΄μ λ³μλ₯Ό μ΄μ©νλ©΄, λ©λͺ¨λ¦¬ μ΄λκ°μ ν λΉλ λ°μ€λ₯Ό κ°λ¦¬ν€κ³ μμ΄μ ν¬μΈν°λ₯Ό μ΄μ©ν΄ κ°μ κ³μ λ°κΏλκ° μ μμ§λ§
- λ°λ‘ μ΄ constantsλ κ°μ κ°λ¦¬ν€λ ν¬μΈν°κ° μ 겨μλ€. νλ² μ μΈκ³Ό λμμ ν λΉν λ€λ‘λ μ λ κ°μ λ³κ²½ν μ μμ
- favor immutable data type always
- μ¬λ§νλ©΄ νλ² ν λΉν λ€μλ κ°μ΄ λ³κ²½λμ§ μλ κ·Έλ° λ°μ΄ν°νμ
μ μ¬μ©ν΄λΌ
μ΄μ ?
- μμ μ±
- thread safety μ΄ν리μΌμ΄μ μ΄ μ€νλλ©΄ νκ°μ§ νλ‘μΈμ€κ° ν λΉλκ³ κ·Έ νλ‘μΈμ€ μμμλ λ€μν threadκ° λμμ λμκ°λ©΄μ μ’ λ λΉ λ₯΄κ³ ν¨μ¨μ μΌλ‘ λμν μ μλλ‘ λμμ€λ€. λ€μν threadλ€μ΄ λμμ λ³μμ μ κ·Όμ ν΄μ κ°μ λ³κ²½ν μ μλλ°, λμμ κ°μ λ³κ²½νλ€λ κ²μ μννλ€. κ·Έλμ κ°λ₯νλ©΄ μ΄λ κ² κ°μ΄ λ³νμ§ μλ λ³μλ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€.(μμΌλ‘ λ³κ²½ν΄μΌν μ’μ μ΄μ κ° μλ€λ©΄) μ½λλ³κ²½μλ νμΈμ΄ μ½λλ³κ²½μμλ μ€μλ₯Ό λ°©μ§ν μ μλ€.
λ°μ΄λ¬μ€κ° mutationμ ν΅ν΄μ κ³μ μ μ μμ μμ΄μ λ°κΏλκ°λ―μ΄, λ°μ΄ν°μ νμ μλ λ³κ²½κ°λ₯ν mutableκ³Ό λ³κ²½λΆκ°λ₯ν immutableμ΄ μλ€.
- Note !
- Immutable data types λ³κ²½λΆκ°
- primitive types, frozen objects Mutable data types λ³κ²½κ°λ₯
- all objects by defult are mutable in JS JSμμ arrayλ mutable data typeμ΄λ€
variable types
primitive type λμ΄μ μμ λ¨μλ‘ λλ μ§ μ μλ νλμ μμ΄ν
number, boolean, null, undefined, simbol
number
cμΈμ΄μ javaλ numberμ μΌλ§λ ν° λ°μ΄ν°λ₯Ό μ μ₯νλμ§ μ μΈν΄μΌνμ§λ§ JSλ κ·Έλ΄νμ μμ JSμμλ integerμ decimal number μκ΄μμ΄ νμ μ number
const infinity = 1 / 0;
// positiveν valueμ κ°μ 0μΌλ‘ λλλ©΄ 무νλ
const negativeinfinity = -1 / 0;
// negativeν valueμ κ°μ 0μΌλ‘ λλλ©΄ 무νλ
const nAn = 'not a number' / 2;
// μ«μκ° μλ stringμ μ«μλ‘ λλκ² λλ©΄ nAn
* const bigInt = 1224456745889554785n;
// μ«μ λμ nμ λΆμ΄λ©΄ bigIntλ‘ μΈμ(μμ§ μ§μμλλ λΈλΌμ°μ μμ)
string
νκ°μ§μ κΈμλ μ¬λ¬κ°μ κΈμλ λ€ string νμ . λ€λ₯Έ stringκ³Ό λΆμ΄λ κ²λ κ°λ₯
template literals
`hi ${brendan}!`
μ΄λ κ² λΆμ¬μ μΈ μ μμ
boolean
false
0, null, undefined,NaN, β β
true
any other type
null
let nothing = 'null';
λͺ ννκ² empty κ°μ μ§μ = nullλ‘ κ°μ΄ ν λΉλ¨
undefined
let x = 'undefined';
let x; // μμ λμΌ
μ μΈμ λμμ§λ§ κ°μ΄ μ무κ²λ λ€μ΄κ°μ§ μμ
symbol
const symbol1 = Symbol('id');
const symbol2 = Symbol('id');
mapμ΄λ λ€λ₯Έ μλ£κ΅¬μ‘°μμ κ³ μ ν μλ³μκ° νμνκ±°λ, μλλ©΄ λμλ€λ°μ μΌλ‘ μΌμ΄λ μ μλ μ½λμμ μ°μ μμλ₯Ό μ£Όκ³ μΆμ λ, μ λ§ κ³ μ ν μλ³μκ° νμν λ μ¬μ© μλ³μλ₯Ό stringμΌλ‘ λλ©΄ λ€λ₯Έ μ½λμμ λμΌν stringμ λ§λ λ κ°μ μλ³μλ‘ κ°μ£Όν¨ λ°λ©΄ symbolμ λμΌν stringμ μ€λ μμ ν λ€λ₯Έ μλ³μλ‘ κ°μ£Όνλ€
const gsymbol1 = Symbol.for('id');
const gsymbol2 = Symbol.for('id');
λ§μ½ λμΌν μλ³μλ₯Ό μ£Όκ³ μΆλ€λ©΄ μ΄λ κ²
console.log(`value: ${symbol1.decription}, type: ${tyopof(symbol2)}`)
μΆλ ₯νλ €λ©΄ μ΄λ κ² descriptionμΌλ‘ λ³νν΄μΌν¨
###(2)object type real-life object, data structure μ±κΈ μμ΄ν λ€μ λ¬Άμ΄μ ν λ¨μ, ν λ°μ€λ‘ κ΄λ¦¬ν μ μκ² ν΄μ€ 물건과 물체 ννλ₯Ό λνν μ μλ λ°μ€ ννλ₯Ό λ»ν¨
const ellie ={ name : 'ellie', age : 20 };
κ°μ²΄ ellieλ constλ‘ μ μΈλμκΈ°λλ¬Έμ κ°μ²΄ellieκ° κ°λ¦¬ν€κ³ μλ λ©λͺ¨λ¦¬μ ν¬μΈν°λ μ 겨μμ΄μ λ€λ₯Έ objectλ‘ ν λΉμ΄ λΆκ°λ₯ νμ§λ§ κ°μ²΄ ellie μμλ nameκ³Ό ageλΌλ λ³μκ° μ‘΄μ¬ν¨. κ·Έκ²λ€μ κ°λ¦¬ν€κ³ μλ ν¬μΈν°λ μ 겨μμ§ μμμ λ€λ₯Έ κ°μΌλ‘ λ³κ²½κ°λ₯!
ellie.age = 21;
first-class function
functionλ λ€λ₯Έ λ°μ΄ν° νμ μ²λΌ λ³μμ ν λΉμ΄ κ°λ₯ ν¨μμ parameter(μΈμ)λ‘λ μ λ¬μ΄ λ¨ ν¨μμμ return νμ μΌλ‘λ functionμ λ¦¬ν΄ κ°λ₯
Dynamic typing : dynamically typed language
Cλ JAVAλ statically typeμ΄λΌ λ³μ μ μΈ μμ μ΄λ€ νμ μΈμ§ κ²°μ ν΄μ μ μΈνμ§λ§ JSλ μ μΈν λ νμ μ μ μΈνμ§μκ³ λ°νμ μ ν λΉλ κ°μ λ°λΌ νμ μ΄ λ³κ²½λ μ μλ€ κ·Έλμ νλ‘ν νμ μμλ μ λ§ μ μ°νμ§λ§ κ·λͺ¨μλ νλ‘μ νΈμμλ μ’μ§μλ€
let text = 'hello';
console.log(`value:${text}, type: ${typeof text}`) // value:Hello, type:string
text = 1;
console.log(`value:${text}, type: ${typeof text}`) // value:1, type:number
text = '7' + 5;
console.log(`value:${text}, type: ${typeof text}`) // value:75, type:string
text = '8' / '2';
console.log(`value:${text}, type: ${typeof text}`) // value:4, type:number
λλκΈ° μ°μ°μκ° μμ΄μ stringμ΄ μλ numberλ‘ λ³νλλ©° μ°μ°μ΄ λλ€
=> λ°νμ μ ν λΉλ κ°μ λ°λΌ νμ μ΄ λ³νκΈ°λλ¬Έμ, μ€κ°μ λ³μμ κ°μ΄ λ°λλ©΄ μ€λ₯κ° λ°μνλ€