데이터 타입은 프로그래밍 언어에서 사용할 수 있는 여러 가지 형태의 데이터를 분류한 것입니다. 이는 숫자, 문자열, 불리언 등을 포함하며, 이들 각각의 데이터 타입은 특정 연산이나 처리를 위해 사용됩니다.
number
(숫자형)string
(문자열)boolean
(논리값)undifined
null
symbol
object
(객체)array
(배열)funtion
(함수)자바스크립트에서 원시 타입은 값 자체를 직접 메모리에 저장하는 기본적인 데이터 타입입니다. 이 값은 한 번 설정하면 변경할 수 없습니다. 이를 불변성(Immutability)이라고 합니다. 값이 생성되면, 그 값을 변경할 수 없으며, 값이 바뀌는 것처럼 보이는 경우 실제로는 새로운 값을 생성하는 것입니다. 메모리에 직접 저장되므로 참조 타입보다 처리 속도가 빠릅니다.
Infinity
, -Infinity
, NaN
등을 특수 숫자 값으로 취급합니다. Infinity
는 어떤 수보다도 큰 특수 값으로, 어떤 수를 0으로 나누려고 하거나 너무 큰 값을 계산할 때 반환됩니다. -Infinity
는 Infinity
의 반대값입니다. NaN
(Not a Number)은 계산 중에 오류가 발생했음을 나타내는 값으로, 숫자가 아닌 값을 숫자로 변환하려고 할 때 반환됩니다.PEMDAS
- 수학에서 우선 순위를 결정하는 규칙을 나타내는 약자입니다. 괄호(Parentheses), 지수(Exponents), 곱셈과 나눗셈(Multiplication and Division), 덧셈과 뺄셈(Addition and Subtraction) 순으로 연산을 수행해야 한다는 것을 의미합니다.// 숫자형 변수 선언 및 초기화
let num1 = 42; // 정수
let num2 = 3.14; // 부동 소수점 숫자
// 덧셈 연산
let sum = num1 + num2;
console.log("덧셈 결과:", sum); // 출력: 45.14
// 곱셈 연산
let product = num1 * num2;
console.log("곱셈 결과:", product); // 출력: 131.88
// 나눗셈 연산
let quotient = num1 / num2;
console.log("나눗셈 결과:", quotient); // 출력: 13.414...
// 정수 나눗셈
let integerDivision = Math.floor(num1 / num2);
console.log("정수 나눗셈 결과:", integerDivision); // 출력: 13
// 제곱 연산
let square = Math.pow(num1, 2);
console.log("제곱 결과:", square); // 출력: 1764
// 곱셈을 먼저 계산
let num3 = 3 + 1 * 9;
console.log(num3); // 출력: 12
// 괄호안에 내용을 먼저 계산
let num4 = (3 + 1) * 9;
console.log(num4); // 출력: 36
문자열은 작은따옴표(''), 큰따옴표(""), 백 틱( )으로 둘러싸인 문자의 집합을 의미한다.
// 문자열 변수 선언 및 초기화
let str1 = "Hello"; // 작은 따옴표로 감싸진 문자열
let str2 = "world"; // 큰 따옴표로 감싸진 문자열
let str3 = "John";
// 템플릿 리터럴 사용
let greeting = `Hello, ${name}!`; // 출력 Hello, John!
// 백틱으로 감싸진 문자열
// ${} 기호를 사용하여 변수나 표현식을 삽입할 수 있습니다.
// 문자열 연결(Concatenation)
let greeting2 = str1 + ", " + str2 + "!";
console.log("인사말:", greeting2); // 출력: Hello, world!
// 문자열 길이(Length)
let length = str1.length;
console.log("문자열 길이:", length); // 출력: 5
// 문자열 일부 추출(Slice)
let part = str2.slice(0, 3);
console.log("일부 문자열:", part); // 출력: wor
// 0부터 3 직전까지의 부분 문자열을 가져옵니다.
// 문자열 대체(Replace)
let replaced = str1.replace("Hello", "Hi");
console.log("문자열 대체:", replaced); // 출력: Hi
// (대체할 대상 문자열, 대체될 새로운 문자열)
// 문자열 검색(Search)
let position = str2.indexOf("world");
console.log("문자열 위치:", position); // 출력: 0 (첫 번째 위치부터 검색하여 "world"를 찾음)
문자열 양쪽 끝의 공백을 제거합니다.
let str5 = " Hello, world! ";
console.log(str5.trim()); // "Hello, world!"
문자열을 대문자로 변환하여 반환합니다.
let msg = "leave me alone right now i hate you plz";
let result2 = msg.toUpperCase();
console.log(result2); // LEAVE ME ALONE RIGHT NOW I HATE YOU PLZ
문자열을 소문자로 변환하여 반환합니다.
let msg = "HELLO WORLD";
let result2 = msg.toLowerCase();
console.log(result2); // hello world
문자열에서 특정 문자열이 처음 나타나는 위치의 인덱스를 반환합니다.
let msg = "haha that is so funny!";
// 문자열에서 "h"의 인덱스 위치를 콘솔에 출력합니다. 결과는 0입니다.
console.log(msg.indexOf("h")); // 0
// 문자열에서 "!"의 인덱스 위치를 콘솔에 출력합니다. 결과는 21입니다.
console.log(msg.indexOf("!")); // 21
// 문자열에서 "$"의 인덱스 위치를 콘솔에 출력합니다. "$" 문자가 없으므로 결과는 -1입니다.
console.log(msg.indexOf("$")); // -1
// 문자열에서 "is"의 인덱스 위치를 콘솔에 출력합니다. 결과는 10입니다.
console.log(msg.indexOf("is")); // 10
문자열의 일부분을 추출하여 새로운 문자열을 반환합니다.
let msg = "haha that is so funny!";
// 문자열의 6번째 문자부터 끝까지 출력합니다. ("that is so funny!")
console.log(msg.slice(5));
// 문자열의 6번째 문자부터 9번째 문자까지 출력합니다. ("that")
console.log(msg.slice(5, 9));
// 문자열의 6번째 문자부터 10번째 문자까지 출력합니다. ("that ")
console.log(msg.slice(5, 10));
// 문자열의 11번째 문자부터 12번째 문자까지 출력합니다. ("is")
console.log(msg.slice(10, 12));
// 문자열의 뒤에서 6번째 문자부터 끝까지 출력합니다.
console.log(msg.slice(-6));
문자열에서 특정 문자열 또는 정규 표현식과 일치하는 부분을 다른 문자열로 대체할 때 사용됩니다.
let msg = "haha that is so funny!";
// 문자열에서 "haha"를 찾아 "lololololo"로 대체하고, 그 결과를 콘솔에 출력합니다.
console.log(msg.replace("haha", "lololololo"));
문자열을 주어진 횟수만큼 반복하여 결합한 새로운 문자열을 반환합니다.
let msg = "안녕하세요";
// 안녕하세요안녕하세요안녕하세요안녕하세요안녕하세요
console.log(msg.repeat(5));
// 불리언 변수 선언 및 초기화
let isRaining = true; // 비가 오고 있는지 여부를 나타내는 변수
// 조건문을 사용하여 불리언 값에 따른 처리
if (isRaining) {
console.log("우산을 가져가세요."); // 출력: 우산을 가져가세요.
} else {
console.log("우산은 필요 없어요.");
}
// 불리언 값을 반환하는 함수 정의
function isEven(number) {
return number % 2 === 0; // 짝수이면 true, 홀수이면 false 반환
}
// 함수 호출 및 결과 출력
console.log("10은 짝수인가요?", isEven(10)); // 출력: true
console.log("7은 짝수인가요?", isEven(7)); // 출력: false
// 변수 선언만 하고 값을 할당하지 않은 경우
let x;
console.log("변수 x의 값:", x); // 출력: undefined
// 함수에서 반환값을 지정하지 않은 경우
function greet(name) {
console.log("Hello, " + name);
}
let message = greet("Alice"); // 함수는 Hello, Alice를 출력하고, 반환값이 없으므로 message는 undefined가 됨
console.log("함수의 반환값:", message); // 출력: undefined
// 객체에서 존재하지 않는 속성에 접근한 경우
let person = {
name: "John",
age: 30,
};
console.log("직업:", person.job); // 출력: undefined
// 배열에서 존재하지 않는 요소에 접근한 경우
let colors = ["red", "green", "blue"];
console.log("세 번째 색상:", colors[2]); // 출력: blue
console.log("네 번째 색상:", colors[3]); // 출력: undefined
// 변수에 명시적으로 null 할당
let user = null;
console.log("사용자 정보:", user); // 출력: null
// 객체 속성에 null 할당
let person = {
name: "John",
age: 30,
job: null,
};
console.log("직업:", person.job); // 출력: null
// 함수의 반환값으로 null 반환
function findUser(id) {
if (id === 123) {
return { id: 123, name: "Alice" };
} else {
return null; // 사용자를 찾을 수 없을 때 null 반환
}
}
let foundUser = findUser(456);
if (foundUser === null) {
console.log("사용자를 찾을 수 없습니다."); // 출력: 사용자를 찾을 수 없습니다.
} else {
console.log("사용자 정보:", foundUser); // 출력되지 않음
}
// 심볼 key는 이름의 충돌 위험이 없는 유일한 객체의 프로퍼티 키
var key = Symbol("key");
console.log(typeof key); // symbol
var obj = {};
obj[key] = "value";
console.log(obj[key]); // value
자바스크립트에서 참조 타입은 값이 메모리에 직접 저장되는 것이 아니라, 그 값을 저장하는 메모리 위치를 참조하는 데이터 타입입니다. 참조 타입의 변수는 메모리 위치를 참조하므로, 원시 타입과는 다르게 값을 변경할 수 있습니다. 이를 가변성(Mutability)이라고 합니다. 객체, 배열, 함수 등이 이에 해당하며, 메모리에 직접 저장되는 원시 타입에 비해 처리 속도가 느립니다.
key : value
쌍으로 구성된 데이터 집합이나 복잡한 개체(entity)를 저장할 수 있습니다.{…}
를 이용해 만들 수 있습니다. 중괄호 안에는 키(key): 값(value)
쌍으로 구성된 프로퍼티(property) 를 여러 개 넣을 수 있는데, key
엔 문자형, value
엔 모든 자료형이 허용됩니다.// 객체 생성
let person = {
name: "John", // 문자열 속성
age: 30, // 숫자 속성
isStudent: false, // 불리언 속성
address: {
// 중첩된 객체
city: "New York",
zipCode: "10001",
},
hobbies: ["reading", "traveling", "photography"], // 배열 속성
};
// 객체 속성에 접근
console.log("이름:", person.name); // 출력: John
console.log("나이:", person.age); // 출력: 30
console.log("학생 여부:", person.isStudent); // 출력: false
console.log("도시:", person.address.city); // 출력: New York
console.log("취미:", person.hobbies[0]); // 출력: reading
// 객체 속성 추가 및 수정
person.gender = "male"; // 속성 추가
person.age = 31; // 속성 수정
console.log("성별:", person.gender); // 출력: male
console.log("나이:", person.age); // 출력: 31
// 배열 생성
let colors = ["red", "green", "blue", "yellow"];
// 배열 요소에 접근
console.log("첫 번째 색상:", colors[0]); // 출력: red
console.log("세 번째 색상:", colors[2]); // 출력: blue
// 배열 길이
console.log("배열 길이:", colors.length); // 출력: 4
// 배열 순회
console.log("모든 색상:");
for (let i = 0; i < colors.length; i++) {
console.log(colors[i]);
}
// 출력:
// red
// green
// blue
// yellow
// 배열 요소 추가
colors.push("orange");
console.log("새로운 색상 추가 후:", colors);
// 출력: ["red", "green", "blue", "yellow", "orange"]
// 배열 요소 제거
let removedColor = colors.pop();
console.log("마지막 색상 제거 후:", colors); // 출력: ["red", "green", "blue", "yellow"]
console.log("제거된 색상:", removedColor); // 출력: orange
// 함수 정의
function greet(name) {
console.log("Hello, " + name + "!");
}
// 함수 호출
greet("Alice"); // 출력: Hello, Alice!
greet("Bob"); // 출력: Hello, Bob!