공부 자료 : 드림코딩 by 엘리
개발 환경 : visual studio code
언어 : js
변수 선언
어플리케이션 마다 쓸 수 있는 메모리는 정해져 있다.
let 이라고 정의하게 되면 한가지의 포인터가 생긴다. 이는 내용을 참조하여 변경이 가능하다.
Var 변수 선언
es6 이후 var는 사용하지 않는다.
대부분의 프로그램 언어는 선언 후 값을 할당하는데 var의 경우에는 선언하지 않고도 사용이 가능하다.
즉 Hoisting이 된다.
hoisting은 어디에 선언했는지 상관 없이 제일 위로 끌어올려주는 것을 말한다.
또한 block Scope 도 무시한다. 즉 어디에서나 접근이 가능하다 규모가 큰 프로젝트에서는 의도하지 않은 호출이 될 수 있기 때문에 최대한 사용을 줄인다.
Mutable 과 Immutable
let : Mutable datatype
const : Immutable datatype
const의 경우 한번 할당하면 포인터가 잠긴다. 즉 변경할 수 없다.
const로 할달 할 수 있으면 최대한 const로 지정한다 이유는 다음과 같다.
1. 보안상의 이유
2. thread safety : 스레드가 동시에 해당 변수의 값을 변경하게 되면 굉장히 위험하다. 이를 방지할 수 있다.
3. 실수 방지 : 다른 개발자가 수정을 해도 오류 발생률을 낮춰준다.
Block Scope
{} 안에 선언 된 변수는 참조할 수 없다.
Type / Template literals
js에서는 타입이 다이나믹하게 결정이 되기 떄문에 알아서 지정해준다. 이후 ts에서 number로 지정 할 수도 있다.
그 외의 지정은 다음과 같다.
Symbol
동일한 string을 작성해도 다른 고유한 식별자를 만들 때 사용한다.
동시에 다발적으로 일어나는 코드에서 우선순위를 주기 위해서 사용
js 에서 제공하는 다이나믹 타이핑
변수 선언시 타입을 같이 선언하지 않고 runtime에 할당된 값에 타입이 변경 될 수 있다.
object
const로 정의된 object 에서 해당 안의 내용을 참조해서는 변경이 가능하다.
코드 전문
let name = 'yoon';
console.log('name');
name = 'hello';
console.log(name);
//block scope
let globalName = 'global name'
{
let name = 'yoon';
console.log('name');
name = 'hello';
console.log(name);
}
console.log(name); // 접근 불가
console.log(globalName);
//
const infinity = 1/0;
const negativeInfinity = -1/0;
const nAn = 'not number' / 2;
console.log(infinity);
console.log(negativeInfinity);
console.log(nAn); // 숫자가 아님
//String
const char = 'c';
const yoon ='yoon';
const grade = 'a' + yoon;
// template literals
console.log(`name : ${yoon}, type: ${typeof grade}`);
//boolean
// false : 0 , null, undefined, NaN, ''
//true : 그 외
// null :텅텅 비어있는 empty값
//undefined : 텅텅 비어있는지 값이 들어가있는지 지정되어 있지 않은것.
//symbol : 동일한 string을 작성해도 다른 고유한 식별자를 만들 때 사용
// 고유한 식별자가 필요하거나 동시에 다발적으로 일어나느 코드에서 우선순위를 주고 싶을 때 사용
const symbol1 = Symbol('id');
const symbol2 = Symbol('id');
console.log(symbol1 === symbol2); // false 출력. id가 같아도 false
//출력시에는 .description을 붙여줘야출력 가능
console.log(`value : ${symbol1.description}, type : ${typeof symbol1}`);
//다이나믹 타이핑 == js
// 변수 선언시 타입을 같이 선언하지 않고 runtime에 할당된 값에 타입이 변경될 수 있다 ==js
let text = 'hello'; // 타입은 string
console.log(text.charAt(0)); //첫번째 인덱스 즉 h출력
console.log(`value : ${text}, type : ${typeof text}`);
text =1;// string 에서 int 로 자동 변환
console.log(`value : ${text}, type : ${typeof text}`);
text = '7' + 5; // string 에 int 를 더하지만 둘다 string으로 인식하여 75 출력
console.log(`value : ${text}, type : ${typeof text}`);
text = '8'/'4'; // 둘다 string 타입이지만 int에서 사용하는 / 를 인식하여 int 로변환하여 계산
console.log(`value : ${text}, type : ${typeof text}`);
console.log(text.charAt(0)); // 오류 발생. 이를 해결해야하는 건 타입 스크립트
//object
const yoon = {name : 'yoon', age : 20}; // const 로 정의되어 있어서 변경이 불가능하다. 하지만 이 안에는 name 과 age는 수정이 가능하다.
yoon.age=21; // 참조로 변경 가능.
실행 결과