mutable type
- 무조건 선언을 먼저 해야함.
- 블록 내에서만 유효.
왜?
- 선언 순서 상관없이 돌아감. (hoisting)
- 블록 밖에서도 유효.
hoisting : 어디에 선언했느냐에 상관없이 제일 위로 선언을 끌어올려주는 것.
age=4;
console.log(age);
var age;
// 4 출력
// 이런게 var hoisting
immutable type
- 값 변경 불가능 (당연히 변수가 아니라 상수니까)
-보안 상 장점.
-여러 thread 가 동시에 변수값을 바꿀 수가 있는데, 굳이 바뀔 필요 없으면 안전하게 상수로.
-코드 변경, 협업 시 값이 바뀌는 실수 방지.
( int, float, long, double ... 없! 음! )
( char 없! 음! )
- '+' 연산을 통해 문자열 합치기 가능
- template literals 기능 있음.
let a=12; let b=13; let c='크리스마스'; console.log(`${a}월 ${a+b}일은 ${c}입니다.`); // 12월 25일은 크리스마스입니다.
- false
0, null, undefined, NaN, ' '(비어있는 string)- true
false 빼고 다
' 넌 텅 빈 값이야! ' 라는 값이 지정된 것.
선언은 됐는데, 값은 정해지지 않은 것.
- Map이나 자료구조에서 고유한 식별자 필요할 때.
- 동시 다발적인 코드에서 우선순위 주고 싶을 때.
- 똑같은 문자열도 다른 식별값를 가짐.
const symbol1 = Symbol('id');
const symbol2 = Symbol('id');
console.log(symbol1 === symbol2); //false
// Symbol( ) 을 쓰면 같은 문자열도 다른 식별자 가짐.
const gSymbol1 = Symbol.for('id');
const gSymbol2 = Symbol.for('id');
console.log(gSymbol1 === gSymbol2); //true
// Symbol.for( ) 을 쓰면 같은 문자열은 같은 식별자 가짐.
{ 속성1: 값1 , 속성2: 값2, ... }
const student = { name:'Max', age:20 };
student.age = 21; // 이렇게 변수에 접근