1. 변수(Variable)의 선언

/* var 키워드 */
var v_1 = 5;
var v_1 = 3;
var v_2;
v_2 = 7;


/* let 키워드 */
let l_1 = 1;
// let l_1 = 2;   => 에러발생
let l_2;
// console.log(l_2);   => 에러발생
l_2 = 4;


/* const 키워드 */
const c_1 = 3;
// const c_2;   => 에러발생
  • JavaScript에서 변수는 자료형 대신 var, let, const 3가지 키워드를 통해 정의할 수 있다.

  • var
    • 같은 이름의 변수 중복선언 가능
    • scope가 함수레벨이기 때문에 선언 위치에 상관없이 함수가 종료될 때까지 유지
    • 선언 이후 초기화 전에 참조시 undefined 반환

  • let
    • 같은 이름의 변수 중복선언 불가능(scope가 다르다면 가능)
    • scope가 블록레벨이기 때문에 선언된 블록(반복문, 조건문 등) 내에서만 유지
    • 선언 이후 초기화 전에 참조시 에러 발생
    • 일반적인 변수를 선언할 경우 이 키워드를 사용하는 것이 권장됨

  • const
    • let과 거의 동일하지만 값의 변경이 불가능
    • 선언과 동시에 초기화된 이후 값이 변경되지 않는 불변값

 

 

2. 원시 자료형(Primary Data Type)

  • Number
    • 말 그대로 숫자를 나타내기 위한 자료형
    • -(2^53 - 1) ~ (2^53-1) 까지의 수와 +Infinity, -Infinity, NaN(Not a Number)를 나타낼 수 있음

  • BigInt
    • Number의 안전 한계(Number.MAX_SAFE_INTEGER)를 넘어서는 큰 정수를 안전하게 저장/연산 가능
    • 정수뒤에 n을 붙이거나 생성자를 호출하여 생성 가능
    • Number타입과 같은 연산자를 지원하지만 Number타입과의 연산은 불가능

  • Boolean
    • 참/거짓을 나타내기 위한 논리타입
    • true, false의 두 가지 값을 가짐

  • String
    • 텍스트 데이터를 나타내기 위한 문자열타입
    • 배열처럼 index를 통해 각 문자에 접근 가능(ex: 문자열 str의 첫 번째 문자는 str[0])
    • 불변 타입이기에 값의 변경은 불가능
    • substr이나 concat, + 연산자 등을 통해 새로운 문자열을 생성하는 것은 가능

  • Symbol
    • 고유하고 변경 불가능한 타입
    • Symbol 함수를 호출하여 생성 가능
    • Symbol 함수 생성시 Description에 해당하는 문자열을 인자로 넘겨줄 수 있음
    • Description이 같아도 별도의 함수호출로 생성된 Symbol은 서로 다른 Symbol

  • Object
    • 이름: 값으로 이루어진 속성(attribute)의 집합
    • Python 등 다른 언어의 딕셔너리(Dictionary)와 유사한 구조를 가진다.
    • 속성의 이름(key)에는 String과 Symbol만이 사용될 수 있음
    • 속성의 값에는 어떤 타입의 데이터도 올 수 있음(함수도 가능)

  • Null
    • 아무 값도 없음을 나타내기 위한 변수
    • null 하나의 값만을 가짐

  • Undefined
    • 아직 정의되지 않았음(초기화 x)을 나타내기 위한 변수
    • undefined 하나의 값만을 가짐

 

 

3. 연산자(Operator)

  • 산술연산자(+, -, *, /, %) 
    • 기본적으로는 C나 Java와 동일하게 동작
    • + 연산자의 경우 String 타입간의 연산시 두 문자열을 이어붙인 문자열을 생성하여 반환/
    • / 연산자의 경우 C나 Java와 달리 0으로 나누었을 경우 에러를 발생시키는 대신 Infinity를 반환
    • 양수를 +0(0)으로 나눌 경우  +Infinity를, -0으로 나눌 경우 -Infinity를 반환

  • 증감연산자(++, --)
    • C나 Java와 동일하게 동작

  • 복합대입 연산자(+=, -=, *=, /=, %=, ...)
    • C나 Java와 동일하게 동작
    • += 연산자의 경우 +연산자가 그랬듯이 String 타입간에도 사용가능

  • 논리연산자(!, ||, &&)
    • C나 Java와 동일하게 동작

  • 비교연산자(<, >, <=, >=, ==, !=, ===, !==)
    • 기본적으로는 C나 Java와 동일하게 동작

    • 동등(==, !=)
      • 단순히 두 변수의 값을 비교
      • 서로 다른 타입의 변수일 경우 한쪽을 강제 형변환하여 비교
      • 3 == '3'은 true이며 3 != '3'은 false가 된다.

    • 일치(===, !==)
      • 두 변수의 값과 타입 모두가 일치하는지 비교

    • 객체간의 비교
      • 동등 혹은 일치 연산자를 사용한 비교는 당연하게도 불가능함
      • JSON.stringify를 사용하여 직렬화한 뒤 비교하는 방법 => 속성의 순서가 다르면 사용할 수 없음
      • 가장 좋은 방법은 비교함수를 별도로 정의하는 것

  • 비트 연산자(&, |, ^, ~)
    • C나 Java와 동일하게 동작 

  • 비트 시프트 연산자(<<, >>, >>>)
    • a << b 는 a를 b번 왼쪽으로 비트 시프트하고 오른쪽을 0으로 채움
    • a >> b 는 a를 b번 오른쪽으로 비트 시프트하고 1 미만으로 이동된 비트는 버림
    • a >>> b는 a >> b에서 왼쪽을 0으로 채우는 비트 시프트 연산자

  • 삼항연산자(<조건> ? <참일 때  값> : <거짓일 때 값>)
    • C나 Java와 동일하게 동작

  • 쉼표연산자
    • 쉼표(,)로 여러개의 명령어를 한줄에서 실행 가능
    • 반복문에서 한번의 반복으로 여러개의 변수의 값을 변경시키는 경우를 제외하면 권장되지 않는 스타일

  • delete 연산자
    • 객체의 속성을 제거하기 위한 연산자
    • delete object[propertyKey];
    • delete object.property;
    • delete objectName[index];
    • 제거에 성공할 경우 true, 실패할 경우 false 반환
    • 배열또한 기본적으로는 객체이기 떄문에 delete를 사용할 수 있지만 권장되지 않음
    • 배열의 원소를 삭제할 경우 배열용 메소드를 사용하거나 단순히 값을 덮어씌우는 것이 권장됨

  • typeof 연산자
    • typeof <피연산자>
    • typeof(피연산자)
    • 피연산자의 타입을 나타내는 문자열("number", "string", "object", "function", "undefined" 등)을 반환

  • void 연산자
    • void (구문)
    • void 구문
    • 구문을 실행한 뒤 결과를 반환하지 않도록 지정
    • 괄호를 사용하는 것이 권장됨

  • 관계연산자
    • in 연산자
      • a in b
      • a 속성이 b객체 안에 존재하는지 확인
      • a는 인덱스일 수도 있음(b가 배열일 경우)

    • instanceof
      • a instanceof b
      • 객체 a가 b타입의 인스턴스인지 확인하는 연산자
      • Primary Data Type의 비교에는 사용할 수 없음
      • 상속관계에 있는 객체일 경우에도 검출이 됨

 

 

4. 주석(Comment)

// in-line comment

/* 
    multi
    line
    comment
*/
  • C나 Java와 마찬가지로 // 로 in-line 주석을,  /*  */ 로 multi-line 주석을 쓸 수 있음

'언어 > JavaScript' 카테고리의 다른 글

#5 기본 구문  (0) 2022.02.17
#4 함수(Function)  (0) 2022.02.17
#3 배열(Array)  (0) 2022.02.15
#2 문자열(String)  (0) 2022.02.14
#0 자바 스크립트  (0) 2022.02.14

+ Recent posts