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와 동일하게 동작
- 복합대입 연산자(+=, -=, *=, /=, %=, ...)
- C나 Java와 동일하게 동작
- += 연산자의 경우 +연산자가 그랬듯이 String 타입간에도 사용가능
- 논리연산자(!, ||, &&)
- C나 Java와 동일하게 동작
- C나 Java와 동일하게 동작
- 비교연산자(<, >, <=, >=, ==, !=, ===, !==)
- 기본적으로는 C나 Java와 동일하게 동작
- 동등(==, !=)
- 단순히 두 변수의 값을 비교
- 서로 다른 타입의 변수일 경우 한쪽을 강제 형변환하여 비교
- 3 == '3'은 true이며 3 != '3'은 false가 된다.
- 일치(===, !==)
- 두 변수의 값과 타입 모두가 일치하는지 비교
- 두 변수의 값과 타입 모두가 일치하는지 비교
- 객체간의 비교
- 동등 혹은 일치 연산자를 사용한 비교는 당연하게도 불가능함
- JSON.stringify를 사용하여 직렬화한 뒤 비교하는 방법 => 속성의 순서가 다르면 사용할 수 없음
- 가장 좋은 방법은 비교함수를 별도로 정의하는 것
- 기본적으로는 C나 Java와 동일하게 동작
- 비트 연산자(&, |, ^, ~)
- C나 Java와 동일하게 동작
- C나 Java와 동일하게 동작
- 비트 시프트 연산자(<<, >>, >>>)
- a << b 는 a를 b번 왼쪽으로 비트 시프트하고 오른쪽을 0으로 채움
- a >> b 는 a를 b번 오른쪽으로 비트 시프트하고 1 미만으로 이동된 비트는 버림
- a >>> b는 a >> b에서 왼쪽을 0으로 채우는 비트 시프트 연산자
- 삼항연산자(<조건> ? <참일 때 값> : <거짓일 때 값>)
- C나 Java와 동일하게 동작
- 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의 비교에는 사용할 수 없음
- 상속관계에 있는 객체일 경우에도 검출이 됨
- in 연산자
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 |