[프론트엔드]_JavaScript(es6)_1. Variable

2021. 11. 21. 12:40[프론트엔드]_/[Javascript]_ES6

728x90
반응형

공부 자료 : 드림코딩 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; // 참조로 변경 가능.

 

실행 결과

 

728x90
반응형