변수: 변경될수있는 값
Js에서 변수선언할때 쓰는 거
블록 유효 범위를 갖는 지역변수를 선언할때 씀
global 한 변수들은 application이 시작할때부터 끝날때까지 메모리에 탑재되기 때문에 최소한으로 쓰는게 좋다. 가능하면 class, 함수, if, for문 등 필요한 부분에서만 정의해서 쓰는게 좋다.
let을 쓰기 이전엔 변수를 선언할때 var을 썼었다.
왜 이제 안쓰려고 하냐? 왜냐하면....
대부분의 프로그래밍 언어에서는 변수를 선언하고 나서 그 안에 값을 할당하는 게 상식적인데...
Javascript에서는 좀 미친짓을 할수있다.
console.log(age); //undefined
age=4;
var age;
이게 가능했던거야;
이것을 var hoisting이라고 한다. 일단 hoisting이란 어디에 선언했냐에 상관없이 항상 제일 위에 선언을 끌어올리는 것이다. (hoisting=끌어올리다)
또한 var을 왜 안쓰냐면,
var에는 block scope이 없다! block을 철저하게 무시한다 이말이다. 초창기에는 이 유연성을 이용하여 잘 썼지만, 어느정도 규모가 큰 프로젝트를 하고 나서는 선언하지 않은 값들이 할당되는 이상한 일들이 발생함.
그래서... 개발자들이 var을 썼을 때의 위험성을 알기 때문에 let을 등장시켰다!
name=4;
let name;
console.log(name); => 에러뜸
let을 선언하기도 전에 값을 넣었다고? 미쳤어? 라며 에러가 뜬다.
한번 할당하면 바뀌지 않는 아이
Immutable data type
1. 보안상으로 const좋음. 한번 선언하면 값을 변경할 수 없기에 해커가 접근하기 어려움.
2. thread safety. 다양한 쓰레드들이 동시에 값을 접근해서 변경할 수 있는데, 이때 가능하면 값을 변하지 않는것을 쓰는게 좋음.
3. 나중에 다른 개발자가 코드를 바꿀때도 그 실수를 줄일수 있음.
Variable types
primitive vs objective
primitive: 더이상 작은 단위로 나눠질수없는 한가지 아이템
ex) number, string, boolean, null, undefined, symbol 등등
objective: single 아이템들을 하나의 박스로 묶어서 다룰수 있는거
ex) function, first-class function
Javascript보다 다른 언어를 쓰면 개발자들이 프로그래밍을 하면서 조금 더 세세하게 메모리를 할당할수있다. 예를들면...
C에서는 short, int, long, float, double 등등 되게 다양하게 숫자를 분리, 할당할수있음.
Java에도 byte, short, long,int,float 등등 짱많음
Javascript에서는 number만 알면돼. very good....!
Javascript에서는 number이라고 타입을 지정해줄 필요도 없다.
그냥 선언할때 let a=12; 이런식으로 하면 아 쟤 number임? ㅇㅋㅇㅋ 하고 적용시켜준다.
Typescript에도 let a: number = 12; 이런식으로 하기만 하면 됨 !
부수적인거긴한데, 알아둬서 나쁘지않은거:
const infinity= 1/0; ⇒ Infinity
const negativeInfinity=-1/0; ⇒ -Infinity
const nAn= 'not a number'/2; ⇒ NaN
새롭게 추가된 number
const bigInt= 123456789123456789n;
chrome에서만 지원되는데..딱히 쓰진 않아
숫자 뒤에 n을 써서 big int다 라고 선언만 해주면 된다.