개발자에게 중요한 것은 글을 작성하는 것이라고 하여
글을 잘써보기 위해 노력해보겠습니다.!
자브스크립트에서는 데이터 타입을 원시타입 vs 객체 타입 으로 나뉩니다.
ECMAScript로 표현할 수 있는 최솟값은 Number 객체의 MIN_VALUE 프로퍼티(Number.MIN_VALUE)에 저장된다
이 값은 브라우저마다 다르지만 보통 5e-324이다.
최대값은 MAX_VALUE 프로퍼티에 저장되며 보통 1.797693138623157e+308이다.
이 범위를 벗어나면 -Infinity, Infinity로 변환된다.
숫자로 표현 할 때 부호비트, 지수, 가수부분으로 나누어서 숫자를 표현하기 때문에
오차가 발생할 수 있다.
숫자형 값 중 NaN이란 특별한 값이 있는데 숫자를 반환할 것으로 예상되는 조작이 실패 했을 경우 반환하는 값이다.
보통 숫자를 0으로 나누려 할 떄 NaN을 반환한다
문자열은 변경 불가능한 값이며(문자열 생성시 변경 x)
으로 묶어서 사용한다.
ES6부터 도입된 문법이며 런타임시 일반문자로 변환되어 처리된다.
var template = `Template literal`;
console.log(template); // Template literal
멀티라인 문자열, 표현식 삽입을 할 떄 사용된다.
표현식 같은 경우는 ${value}형식으로 변수를 넣어서 간단하게 사용 가능하다.
true, false
--> 개발자가 의도적으로 할당하는 값이 아닌경우 자바크스립트 엔진이 변수를
초기화 할 때 사용하는 값이다.
값이 없다를 할당하고 싶을 때는 undefined보다 null을 사용한다.
변수같은 경우를 선언한다라고 표현하고
함수같은 경우를 정의한다라고 표현한다.
변수에 값이 없을을 의도적으로 명시하는 것
null이 할당됨으로써 가비지 컬렉션을 수행하게 한다
ES6에서 추가된 7번째 타입으로
다른 값과 중복되지 않는 유일 무이한 값이다.
일반적으로 심볼은 객체의 프로퍼티 키로 사용된다
const obj = {};
const sym1 = Symbol();
const sym2 = Symbol('foo');
const sym3 = Symbol('foo');
obj[sym1] = 'propertyValue1';
obj[sym2] = 'propertyValue2';
obj[sym3] = 'propertyValue3'; // no conflict with sym2
console.log(obj); // {Symbol(): 'propertyValue1', Symbol(foo): 'propertyValue2', Symbol(foo): 'propertyValue3'}
console.log(obj[sym1]); // propertyValue1
console.log(obj[sym2]); // propertyValue2
console.log(obj[sym3]); // propertyValue3
객체란
이름과 값을 가지는 데이터를 의미하는 프로퍼티와 동작을 의미하는 메소드를 포함할 수 있는 독립적 주체이다.
또한 JS는 객체 기반의 언어이며 JS이루는 모든것은 거의 객체이다.
데이터 타입에 의한 메모리 공간의 확보와 참조 라고 할 수 있다.
타입의 중요성은 메모리 크기의 활용과 연관된다.
자바스크립트는 동적 타입언어이다.
이것은 값이 할당되는 시점에서 자동으로 타입이 결정된다는 뜻이다.
따라서 한가지 변수에 여러가지 타입을 할당할 수 있다.
이러한 동적타입언어의 구조적 단점은
변수를 선언하기 전에 참조가 가능한 것을 변수 호이스팅이라 한다.
모든 선언문은 호이스팅된다
호이스팅이란 var 선언문이다 function선언문 등 모든 선언문이
해당 Scope의 선두로 옮겨진 것처럼 동작하는 특성이다.
그렇기에 JS에서 모든 선언문이 선언되기 전에 참조가 가능하다.
함수 레벨 스코프
함수 내에서 선언된 변수는 함수 내에서만 유요하며 함수 외부에서는 참조 할 수 없다.
블록 레벨 스코프
코드 블록 내에서 선언된 변수는 코드 블록 내에서만 유요하다.
ES5에서 변수를 선언하는 유일한 방법은 var키워드였다.
var키워드의 특징
1. 함수 레벨 스코프
- 전역 변수의 남발
- for loop 초기화식에서 사용한 변수를 for loop 밖에서 참조할 수 있다.
2. var 키워드 생략 허용
- 의도하지 않은 변수의 전역화
3. 중복 선언 허용
- 의도하지 않은 변수값 변경
4. 변수 호이스팅
- 변수를 선언하기 전에 참조가 가능하다.
위와 같은 단점을 보완하기 위해 ES6에서 let과 const키워드를 도입하였다.
참조
https://poiemaweb.com/js-data-type-variable
https://velog.io/@hustle-dev/%EB%AA%A8%EB%8D%98-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-Deep-Dive-69%EC%9E%A5