JavaScript 자료형에 관한 정리글입니다.
함수(메서드), Number, String(문자열), Array(배열) 에 대해 다룹니다.
// --------------- 함수 선언식
function add_1(x, y) {
return x + y;
}
// --------------- 함수 표현식
const add_2 = function (x, y) {
return x + y;
};
// --------------- 화살표 함수
const add_3 = (x, y) => x + y;
const add_4 = add_1; // 메모리 주소 복사. add_1 의 주소를 동일하게 가리킴.
console.log(add_4(1, 3)); // 4
console.log(add_1 == add_2); // false : 동일한 주소에 들어있지 않음.
console.log(add_1 == add_4); // true : 동일한 주소를 가리킴.
아래와 같이 배열의 요소(element) 혹은 객체의 속성(property)에 함수를 정의하여 저장할 수도 있습니다.
JavaScript에서의 배열은 Object 즉, 객체로 취급되기 때문에 가능합니다.
자세한 내용은 본문의 Array 챕터를 확인하세요!
let list = [
"john",
27,
function hello_func() {
console.log("hello");
},
]; // List에 함수 저장
let obj = {
name: "john",
age: 27,
hello_func() {
console.log("hello");
},
}; // Object에 함수 저장
function hello_func() {
console.log("hello");
} // 일반 함수
// 셋 모두 같은 결과값이 출력됨.
hello_func(); // hello
obj.hello_func(); // hello
list[2](); // hello
console.log(typeof hello_func); // function
console.log(typeof obj.hello_func); // function
console.log(typeof list[2]); // function
객체에 저장된 값이 함수인 경우, 이를 메서드(method) 라고 부릅니다.
메서드는 기본적으로 특정 주소값을 가리키며, 해당 공간에 메모리를 할당받아 함수가 저장되어있습니다.
function hello_func() {
console.log("hello");
}
function hi_func() {
console.log("hi");
}
let obj = {
name: "john",
age: 27,
func: hello_func,
};
hello_func(); // hello 출력
hi_func(); // hi 출력
obj.func(); // hello 출력
obj.func = hi_func; // Object의 func를 hi_func 함수로 변경.
obj.func(); // 변경 후 hi 출력
this는 메서드에서 객체 내부의 속성(property) 값을 접근할 수 있는 지시자입니다.
Object 객체 내에서 해당 객체의 속성을 불러올 때 사용할 수 있습니다.
this를 사용하는 메서드는 추가 가능하며, 이 때 this는 런타임에 결정되어 호출한 객체에 따라 달라집니다.
let user = { name: "john" };
let admin = { name: "admin" };
function hello_func() {
console.log("hello " + this.name);
}
user.func = hello_func; // name == user.name == "john"
admin.func = hello_func; // name == admin.name == "admin"
user.func(); // john 출력
admin.func(); // admin 출력
JavaScript에서 일반적인 숫자는 64비트 형식의 IEEE-754 표준 기반 형태로 저장되는 자료형입니다.
10진수 외에도 16진수, 2진수, 8진수의 다양한 진수를 사용합니다.
대표 상수 값
대표 메서드
let billion_1 = 1000000000; // 10억
let billion_2 = 1e9; // 1 + 0 9개
let us = 1e-6; // micro sec, 왼쪽으로 6번 소수점 이동
console.log(billion_1); // 1000000000 출력
console.log(billion_2); // 1000000000 출력
console.log(us); // 0.000001 출력
console.log(0x0f); // 15
console.log(0o17); // 15
console.log(0b1111); // 15
지수로 표기되는 양수 최대/최소 값: Number.MAX_VALUE, Number.MIN_VALUE
안전하게 표기되는 최대(양수)/최소(음수) 값: Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER
무한대 양수/음수 값: Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY
부동 소수점 산술에서 정의되지 않거나 표현할 수 없는 값으로 해석될 수 있는 숫자 데이터 유형: Number.NaN
텍스트 길이에 상관없이 문자열 형태로 저장되는 자료형입니다.
JavaScript에서는 글자 하나만 저장할 수 있는 char 자료형이 없습니다.
JavaScript에서 문자열은 페이지 인코딩 방식과 상관없이 항상 UTF-16 형식을 따릅니다.
대표 속성(property)과 메서드(method)
String 정의 방법: 큰따옴표(""), 작은 따옴표(''), String()
문자열과 변수 혼합 표현 = 백틱 (`)
문자 표기 방법: \n, \r, \, \t, \u{}, ...
길이 확인 방법: String.length
개별 문자 접근 방법: String.charAt(index), String.charCodeAt(index), String[index]
문자열 검색(index): String.indexOf(substr, pos), String.lastIndexOf(substr, pos)
문자열 검색(bool): String.includes(substr, pos), String.startsWith(substr, pos), String.endsWith(substr, pos)
ㄴ Boolean 값을 리턴합니다.
대소문자 변환: String.toUpperCase(), String.toLowerCase()
처음 만나는 요소 문자열 치환(치환된 문자열 반환): String.replace(origin_str, change_str)
정규 표현식 활용 문자열 치환: 치환 문자열에 정규 표현식 기입
--> /치환문자열/g(전체)i(대소문자 구분 X)
📝 MDN 정규표현식 문서
📝 한층 쉬운 정규표현식 정리글
위치 기반 문자열 추출: String.slice(start, end), String.substring(start, end)
ㄴ start index 이상, end index 미만 문자열을 추출합니다.
길이 기반 문자열 추출: String.substr(start, length)
ㄴ start index 로부터 length 개의 문자열을 추출합니다.
여러 개체(Entity)값을 순차적으로 나열한 자료 구조입니다.
✅ 알고리즘 내 사용 빈도가 아주 높습니다.
배열 내 값을 요소(element)라고 하며, 배열 요소는 index로 접근합니다.
각각의 공간이 할당되어있어 다양한 자료형들을 하나의 배열 내에 위치시킬 수 있습니다.
인덱스는 0부터 시작합니다.
대표 속성(property)과 메서드(method)
선언: "new Array()" 혹은 "[]"를 통해 선언하며, 사이즈 혹은 값을 입력하여 초기화도 가능합니다.
접근 방법: "Array[index]"를 통해 index로 요소에 O(1) 복잡도 속도로 접근합니다.
배열 속성: "Array.length"를 통해 배열 요소의 개수를 확인할 수 있습니다.
JavaScript에서 배열은 다른 언어에서 말하는 일반적인 배열이 아닌 Hash 기반의 객체입니다.
메모리가 연속적인 밀집 배열(dense array)가 아닌 비 연속적인 희소 배열입니다.(sparse array)
📝 참고 사이트: 자바스크립트 배열은 배열이 아니다
배열 타입 확인 방법: Array.isArray(value)
배열 일부 요소 삭제: delete array[index]
❗️ 삭제해도 배열 사이즈가 그대로인 문제점이 있습니다.
ㄴ 따라서 실제 개발시에는 주로 Array.pop() 을 더 많이 사용합니다.
💻 Array 선언/타입 확인/delete 예제 보러가기
배열 요소 조작은 뒤쪽 조작과 앞쪽 조작으로 나눠질 수 있습니다.
LIFO-Back
- 배열 추가 : Array.push(element) / 배열 삭제 : Array.pop()
LIFO-Front
- 배열 추가 : Array.unshift(element) / 배열 삭제 : Array.shift()
배열 분리
- Array.splice(index[, deleteCount, elem1, ..., elemN])
배열 요소 삭제
- Array.slice([start], [end])
ㄴ splice와 다르게 원본 배열에 영향을 주지 않습니다.
배열 다중 병합
- Array.concat(arg1, arg2, ...)
for ... length
(index 접근)for ... of
/ forEach
(element 접근)for ... in
(key 접근)💻 Array 조작 예제 보러가기
💻 Array 반복문 예제 보러가기