변수, 상수, 데이터타입[Learning JavaScript]

변수와 상수

  • 변수란 간단히 말해 이름이 붙은 값으로 언제든 바뀔 수 있다.
//let은 변수 선언에만 쓰이고, 각 변수는 한 번만 선언할 수 있다.(ES6에서 새로 생긴 것)
let currentTempC = 22;
  • 초깃값을 할당하지 않으면 암시적으로 undefined가 할당된다.
//let targetTempC = undefiend와 같음
let targetTempC;
  • 상수는 변수와 마찬가지로 값을 할당받을 수 있지만, 한 번 할당한 값을 바꿀 수는 없다.(ES6에서 새로 생긴 것)
//const는 상수 선언
const TEMP_C = 30;

변수와 상수 중 어떤 것을 써야할까?

  • 될 수 있으면 변수보다 상수를 써야한다.
  • 데이터 값이 아무 때나 막 바뀌는 것보다는, 고정된 값이 이해하기가 쉽다.
  • 우선 상수를 먼저 생각하고, 그 상수의 값이 바뀌는 게 자연스럽다고 생각된다면, 언제든지 변수로 바꿀 수 있다.

식별자 이름

  • 변수와 상수, 함수 이름을 식별자라고 한다.
* 식별자 규칙
1. 식별자는 반드시 글자나 달러 기호($), 밀줄(_)로 시작해야 한다.
2. 실별자에는 글자와 숫자, 달러 기호, 밑줄만 쓸 수 있다.
3. 파이나 시그마 같은 유니코드 문자도 쓸 수 있다.
4. 예약어는 식별자로 쓸 수 없다.
  • 자바스크립트에서는 $를 특수 문자로 사용하지 않는다.
* 식별자를 만들 때 염두해야 할 방침
1. 식별자는 대문자로 시작해서는 안된다.
2. 밑줄 한 개 또는 두개로 시작하는 식별자는 아주 특별항 상황, 또는 내부 변수에서만 사용한다.
3. 제이쿼리 사용 시, 달러 기호로 시작하는 식별자는 보통 제이쿼리 객체라는 의미이다.

리터럴

  • 값을 프로그램 안에서 직접 지정한다는 의미. 값을 만드는 방법이다.
  • 리터럴과 식별자의 차이 : 자바스크립트는 따옴표를 통해 구별한다.
    // "conference_room_a"는 리터럴 / room1은 변수를 가리키는 식별자
    let room1 = "conference_room_a";
    // currentRoom의 값은 room1의 값과 같다.
    let currentRoom = room1;
    // ERROR : conference_room_a란 식별자는 존재하지 않는다.
    currentRoom = conference_room_a;
    

원시 타입과 객체

  • 자바스크립트의 값은 원시 값 또는 객체이다.
  • 원시타입은 불변이다.
* 원시타입 종류
1. 숫자
2. 문자열
3. 불리언
4. null
5. undefined
6. 심볼
//str은 불변의 값 "hello"로 초기화
let str = "hello"
//다시 새로운 불변의 값 "world"를 할당
str = "world";
  • 객체는 여러가지 형태와 값을 가질 수 있다.
  • 유연한 성질 때문에 데이터 타입을 만들 때 많이 사용.
* 자바스크립트의 내장 객체 타입 종류
1. Array
2. Date
3. RegExp
4, Map과 WeakMap
5. Set과 WeakSet
6. Number (원시 타입 중 숫자와 대응)
7. String (원시 타입 중 문자열과 대응)
8. Boolean (원시 타입 중 불리언과 대응)

숫자

  • 자바스크립트는 10진수, 2진수, 8진수, 16진수의 네 가지 숫자형 리터럴을 인식한다.
    let count = 10; //숫자 리터럴, count는 더블이다.
    const blue = 0x0000ff; //16진수, 16진수 ff는 10진수 255와 같다.
    const umask = 0o0022; //8진수, 8진수 22는 십진수 18과 같다.
    const roomTemp = 21.5; //십진수
    const c = 3.0e6; // 지수 (3.0 * 10^6 = 3,000,000)
    const e = -1.6e-19; //지수 (-1.6 * 10^-19 = 0.00000000000000000016)
    const inf = Infinity;
    const ninf = -Infinity;
    const nan = NaN; //숫자가 아님
    
  • Number 객체의 프로퍼티
    const small = Number.EPSILON; // 1에 더했을 때 1과 구분되는 결과를 만들 수 있는 가장 작은 값.
    const bigInt = Number.MAX_SAFE_INTEGER; //표현할 수 있는 가장 큰 정수
    const max = Number.MAX_VALUE; //표현할 수 있는 가장 큰 숫자
    const minInt= Number.MIN_SAFE_INTEGER; //표현할 수 있는 가장 작은 정수
    const min = Number.MIN_VALUE; //표현할 수 있는 가장 작은 숫자
    const nInf= Number.NEGATIVE_INFINITY; //-Infinity
    const nan= Number.NaN; //Nan
    const inf= Number.POSITIVE_INFINITY; //Infinity
    

문자열

  • 문자열은 텍스트 데이터이다.
  • 자바스크립트의 문자열 리터럴에는 작은따옴표, 큰따옴표, 백틱을 사용한다.

이스케이프

  • 역슬래시()를 써서 이스케이프하면 문자열이 끝나지 않았다고 자바스크립트에 알릴 수 있다.

템플리 문자열

  • 문자열 템플릿에는 큰따옴표나 작음따옴표를 쓰지 않고 백틱을 사용한다.
  • 문자열 템플릿 안에서는 달러 기호가 특수문자가 된다.
    let currentTemp = 19.5;
    const message = `The current temperature is ${currentTemp}\u00b0c`;
    

심볼

  • 유일한 토큰을 나타내기 위해 ES6에서 도입한 새 데이터 타입.
  • 심볼은 항상 유일하다.
  • 원시 값의 특징을 모두 가지고 있으므로 확정성 있는 코드를 만들 수 있다.

null과 undefined

  • null은 프로그래머에게 허용된 데이터 타입이며 undefined는 자바스크립트 자체에서 사용한다.
  • 변수를 선언하기만 하고 명시적으로 값을 할당하지 않으면 그 변수에는 기본적으로 undefined가 할당된다.
    let currentTemp; //암시적으로 undefined이다.
    const targetTemp = null; //대상 온도는 null, 즉 아직 모르는 값.
    currentTemp = 19.5; //currentTemp에는 이제 값이 있다.
    currentTemp = undefined; //currentTemp는 초기화되지 않았다.
    

객체

  • 여러가지 값이나 복잡한 값을 나타낼 수 있으며, 변할 수도 있다.
  • 객체에도 주오갈호를 사용하는 리터럴 문법이 있다.
    ```js const obj = {}; obj.color = “yellow”; //객체의 콘텐츠는 프로퍼티또는 멤버라고 부른다. 프로퍼티는 이름과 값으로 구성 obj[“not an identifier”]=3; obj[“not an identifier”]; //3 obj[“color”]; //yellow const SIZE = Symbol(); //심볼 프로퍼티에 접근할 떄도 대괄호를 사용 obj[SIZE] = 8; obj[SIZE]; //8 obj.speak = function(){ return “Meow!” } //객체에 함수를 담을 수도 있다. delete obj.speak; //객체에서 프로퍼티를 제거할 떄는 delete 연산자를 사용한다.

배열

  • 배열 크기는 고정되지 않는다. 언제든 요소를 추가하거나 제거할 수 있다.
  • 요소의 데이터 타입을 가리지 않는다.
  • 배열 요소는 0으로 시작한다.