
JavaScript는 객체 기반의 언어이다.
JavaScript를 이루고 있는 거의 모든 것이 객체이다.
이를 생각하고 들어가자..!
데이터 타입 : 값의 종류
| 구분 | 테이터 타입 |
|---|---|
| 원시 | 숫자 |
| 원시 | 문자열 |
| 원시 | 불리언 |
| 원시 | undefined |
| 원시 | null |
| 원시 | 심벌 |
| 원시 | Bigint |
| 객체 | 객체, 함수, 배열 등.. |
데이터 타입 마다
확보해야 할 메모리 공간의 크기도 다르고메모리에 저장되는 2진수도 다르며읽어 들여 해석하는 방식도 다르다..데이터 타입을 하나씩 살펴보자..
JavaScript는 모든 수를 실수로 처리한다.
console.log(1 === 1.0) // true
JavaScript에는 특별한 값도 있다..!
let str;
str = Infinity //양의 무한대
str = -Infinity //음의 무한대
str = NaN //산술 연산 불가(not-a-number)
문자열 타입은 텍스트 데이터를 나타내며, let var 등과 같은 토큰과 구분하기 위해 사용한다.
// 종류
let str;
str = 'a' //작은 따옴표; - 가장 일반적인 표기법
str = "b" //큰 따옴표
str = `c` //백틱(ES6)
ES6부터 탬플릿 리터럴 이라고 하는 새로운 문자열 표기법이 도입되었다!
console.log(`a c
b`); // 이런식으로 공백, 개행(\n) 가능!
console.log(`이 값은 ${1 + 2} 입니다.`) // 이 값은 3 입니다. // 굿...
출력문제 (이거 풀 때 쓰면 개꿀..)
참(true), 거짓(false)
흐름제어할 때 많이 쓰인다.
undefined.. => 정의되지 않은... 이라는 뜻이다..
let a = 1;
a = undefined;
혹시 이런식으로 의도적으로 할당한 적이 있는가..? (예전에...)
우리는 이 뜻을 잘 생각하며 사용해줄 필요성이 있다.
undefined는 자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값이다..앞으로 우리는
null을 이용하도록 하자
null 타입은 null만 있다..!
undefined에서 말했듯이 의도적으로 명시할 때 사용!
함수가 값을 반환할 수 없을 때 반환하기도 함!
심벌은 변경 불가능한 원시 타입의 값이다.
다른 값과 중복되지 않는 유일무이한 값!
객체의 유일한 프로퍼티 키를 만들기 위해 사용한다!
// 심벌 값 생성
var key = Symbol('key');
console.log(typeof key) // symbol
// 객체 생성
var obj = {};
// 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용한다.
obj[key] = 'value';
console.log(obj[key]) // value
위와 같이 원시 타입들을 훑어보았고, 객체는 추후에 적는다고 치자..
그럼 이제 왜 써야 되는지에 대해서 먼저 적자면...
값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
위와 같이 메모리 공간에 대해 낭비와 손실 없이 값을 저장할 수 있는지 알아야 한다는 것이다.
이로써 데이터를 효율적으로 다루고 안정성을 유지하는게 아닐까..
정적 타입 언어 : 사전에 데이터 타입 선언하는 것!
컴파일 시점에 타입 체크를 수행한다.
안정적인 구현이 가능하다.
동적 타입 언어 : 정적 타입 언어와 구별하기 위해 작명 됨..
자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정 된다.
재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.
변수의 갯수가 많을 수록 오류가 발생할 확률이 높아지니 제한적으로 사용하자.
변수의 유효 범위를 좁게 만들어 부작용을 억제하자
전역 변수를 최대한 지양하자
네이밍을 목적과 의미를 파악할 수 있도록 확실하게 하자
뭔가 언어의 유연성이 높아지는 만큼 책임감이 높아지는 기분이다..