[ JavaScript 참고서 ] 데이터 타입

Question Murder·2022년 10월 26일
0

1. variable

변수는 데이터를 저장하는 컨테이너로(보관함) var, let, const가 있다.

2. blockScope

  • ES6표준에서 let, const를 도입하면서 js에서 사용가능
    { } 블록단위내에서 (if-else, while, for 그리고 try-catch) 유효 범위를 갖게 하는 스코프이다.
  • var를 통해 변수를 블록스코프안에서 사용하면 전역 스코프, 함수 스코프로 인식되어 접근이 가능 그러나 let을 통해 선언하면 해당 블로내에서만 접근 가능해서 출력 안됨
{let jess="안녕"}
		console.log(jess)
		//안녕
		{let je="안녕"}
		console.log(je)
		//Uncaught ReferenceError: je is not defined at <anonymous>:2:13

3. var를 쓰면 안되는 이유

: var는 ES6전에 사용한 변수이다.
1. var선언하기 전에 값을 할당해 할당전에도 값이 출력됨
2. 중복선언이 가능 -> var hoisting때문

  • var hoisting: 변수의 선언부를 Scope최상단으로 올림
  • js는 Function-scoped이므로,코드 전체의 최상단이 아닌 "함수 내부의 최상단"으로 이동
    3. 블럭스콥이 없음 철저히 무시함

* Function-scoped란

	함수 내에서 선언된 변수는 함수 내에서만 유효함. 함수 외부에서는 참조할 수 없다. 
	- 함수 내부에서 선언한 변수는 지역변수 
	- 함수 외부에서 선언한 변수는 전역변수 

* Block-level-scope

	대부분 프로그래밍은 block을 사용 , js는 function-scope사용
	- 모든 코드 블록 (if, while, try-catch 등) 선언된 변수는 코드 블록내에서만 유효
	- 블록 외부에서는 참조할 수 없다. 
	- 블록 내부에서 선언한 변수는 지역변수다. 

참고
https://hoondev.tistory.com/101

4. let, constants

var키워드의 단점을 보완하기위해 등장 
- 차이: immutable, mutable 
let
	- 재할당이 가능 -> mutable
const
	- 재할당이 불가능 -> immutable
	- 값을 한번 할당하면 값이 절대 바뀌지 않으므로 상수 
	- 보안에 좋음 (해커가 값을 변경방지)

참고
https://poiemaweb.com/es6-block-scope

5. variable type

  • primitive, single item: number, string, boolean, null, undefined, symbol
    :기본 값으로 객체를 제외한 변경할 수 없는 값을 정의하는 더이상 나눠지지 않는 한가지 타입
    - Null: 하나의 값 null만 있음 (텅텅 비어있는, 아무것도 아니야!)
    - undefined: 하나의 값 undefined만 있음 (선언은 되었지만 값이 할당되지 않음)
    - Boolean: true , false 있으며 삼항 연산자, if~else, while 등 같이 조건부 연산에 사용
    - false: 0, null, undefined, NaN, ‘’, 3<1
    - true: any other value
    - Number:
    - infinity : 1/0
    - -infinity : -1/0
    - NaN: 숫자가 아님 : ‘hello’/2
    - BigInt:
    - String: 백틱이용하게되면 간편하게 string 만들 수 있음
  • object: box container
    - 싱글을 묶어서 한단위로 관리
  • function, first-class function
    - 펑션도 다른 데이터타입처럼 할당이 가능하고 , 인자, 리턴으로도 가능하다.

6. symbol

  • 고유한 식별자, 우선순위를 주고 싶을때, 동일한…?

7. dynamic typing

: RUN타임때 타입이 정해져서 유연하지만 위험하기도하다.

  • 타입이 할당해줌에 따라 타입이 변함

8. 호이스팅이 진행과정

[ 변수는 3단계에 걸쳐 생성 ]

  • 선언 단계: 변수객체에 등록되며, 이 객체는 스코프가 참조하는 대상이 된다.
  • 초기화 단계: 변수객체에 등록된 변수를 위한 공간을 메모리에 확보하면서 변수는 undefined상태
  • 할당 단계: undefined로 초기화된 변수에 실제 값을 해당

[ 변수 호이스팅 과정 ]

이때 var로 선언된 변수는 선언단계/초기단계로 이루어지며,
스코프에 변수를 등록(선언 단계) > 메모리에 변수를 위한 공간 확보 > undefined 초기화 한다.
-> 그러므로 접근해도 "error"대신 "undefined"를 반환 그리고 변수에 할당문에 도달해야 값이 할당됨

[ let ]

let키워드로 선언된 변수는 선언단계/초기단계로 "분리"되어 진행.

  • 선언단계: 스코프에 변수를 등록
  • 초기화 단계: 변수 선언문에 도달할때 이루어짐
    -> 초기화 이전에 변수에 접근하면 에러발생 "변수를 위한 메모리 공간이 아직 확보되지 않았기 때문"
console.log(bal);
	let bal;
		//Uncaught ReferenceError: bal is not defined at <anonymous>:1:13
	console.log(ball);
	var ball;
		//undefined
profile
물음표 살인마

0개의 댓글

관련 채용 정보