// 1. var
var myVar = "Hello World";
// 2. let
let myLet = "Hello World2";
// 3. const
const myConst = "Hello World3";
숫자
1-1. 정수(int)
1-2. 실수(float)
1-3. 지수형(Exp)
1-4. NaN
1-5. Infinity
1-6. -Infinity
문자열 (아래는 문자열에서 가능한 유용한 기능)
2-1. length (var.length -> var의 길이)
2-2. concat (var1.concat(var2) -> var1 끝에 var2 결합)
2-3. substr, slice (var.substr(s, l) -> s부터 l개 var.slice(s, e) -> s부터 e까지)
2-4. search (var1.search(var2) -> var1에서 var2가 시작되는 위치)
2-5. replace (var.replace(b, a) -> var에서 b를 a로 대체)
2-6. split (var.split(s) -> var를 s 기준으로 분할)
불리언
3-1. true
3-2. false
undefined
할당되지 않은 값.
null
값이 존재하지 않음을 명시적으로 나타내는 방법.
객체
ley-value 짝으로 이루어진 데이터 타입.
배열
여러 개의 데이터를 순서대로 저장하는 데이터 타입.
DataType(var) -> var를 DataType으로 변환.
변수가 유효한 범위.
전역 vs. 지역
전역: 전역에서 선언된 변수는 어디에서도 유효함
지역: 지역에서 선언된 변수는 해당 지역에서만 유효함
input과 output을 갖고 있는 기능의 단위.
function funcName(input) {
return output
}
let funcName2(input) {
return output
}
funcName(input)
let arrowFunc = (x, y) => {
return x + y
}
let arrowFunc2 = (x, y) => x + y
if (condition (true || false)) {
then do this
}
else if (other condition than if) {
then do this
}
else {
otherwise, do this
}
변수의 값에 따라 여러 개의 경우(case) 중 하나 선택
let var = "abc";
switch (var) {
case "abc":
do something
break
case "def":
do other thing
break
case "ghi":
do other thing
break
default:
do other thing
break
if (x > 0) {
console.log("x는 양수입니다.");
}
(x > 0) && console.log("x는 양수입니다.");
let y;
let z = y || 20;
key-value 짝으로 이루어진 데이터 타입.
하나의 변수에 여러 값을 저장할 수 있음.
let person = {
name: "홍길동",
age: 30,
gender: "남자",
}
funcion Person(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
let person = new Person("홍길동", 30, "남자");
객체의 키를 접근해서 값을 볼 수 있음.
console.log(person.name) -> "홍길동"
객체와 배열은 일반 변수들에 비해 크기가 크므로 별도의 공간(메모리 힙)에 따로 저장됨.
우리가 흔히 쓰는 변수명에는 변수의 값이 아니라 메모리 주소가 저장됨.
따라서, 같은 값을 가진 객체끼리 비교(===)를 하더라도 false가 나올 수 밖에 없음.
이 때, 값만 비교하고 싶을 때 JSON.stringify(obj)를 사용해 obj를 문자열로 변환하여 비교하면 됨.
let person1 = {
name: "홍길동",
age: 30,
};
let person2 = {
gender: "남자",
};
let perfectMan = { ...person1, ...person2 };
console.log(perfectMan);
spread(...) 연산자로 중괄호를 풀 수 있음.
person1과 person2을 풀어서 각각의 key-value가 perfectMan에 할당됨.
// 1. 기본
let abc = ["a", "b", "c"];
// 2. 크기 지정
abc = new Array(3);
대괄호로 인덱스에 접근. ([0], [1], [2], ...)
let abc = ["a", "b", "c"]
let numbers = [1, 2, 3, 4, 5]
// 1. push. 배열의 끝에 요소 삽입.
abc.push("d") // -> ["a", "b", "c", "d"]
// 2. pop. 마지막 요소 제거.
abc.pop() // -> ["a", "b", "c"]
// 3. shift. 첫 번째 요소 제거.
abc.shift() // -> ["b", "c"]
// 4. unshift. 맨 앞에 요소 삽입.
abc.unshift("a") // -> ["a", "b", "c"]
// 5. splice. i번째부터 n개를 삭제 후 그 자리에 요소 삽입.
abc.splice(1, 1, "d") // -> ["a", "d", "c"]
// 6. slice. i번째부터 j번째(미포함)까지 반환.
abc.slice(1, 2) // -> ["d"]
// 7. forEach. 배열의 각 요소에 접근하여 원하는 기능을 수행.
// 매개변수 자리에 함수를 넣는 것: 콜백 함수
numbers.forEach(function(n) {
console.log("number: " + n);
}); // -> number: 1 ... number: 5
// 8. map. 배열의 각 요소에 접근하여 기능을 수행 후 새로운 배열 반환
// 때문에 function은 반환값이 있어야 함.
/ * 항상 원본 길이만큼 반환됨.
let newNumbers = numbers.map(function(n) {
return n * 2;
}); // -> newNumbers = [2, 4, 6, 8, 10]
// 9. filter. map과 유사하지만 조건이 들어감.
// 조건에 해당되는 요소만 반환.
let filteredNumbers = numbers.filter(function(n) {
return n % 4 === 0;
}) // -> filteredNumbers = [4, 8]
// 10. find. 조건이 성립되는 첫 번째 요소 반환.
num = numbers.find(function(n) {
return n > 5;
}) // -> num = 6
for (초기값; 조건식; 증감식) {
}
// 1. i는 0부터 시작.
// 2. i가 10보다 작은 동안 반복.
// 3. 반복하면서 i는 1씩 증가.
for ( let i = 0; i < 10; i++) {
}
let person = {
name: "John",
age: 30,
gender: "male",
};
for (let key in person) {
console.log(key + ": " + person[key]);
}
// 초기값
// while (조건) {
// 증감
// }
// 위의 for문과 동일
let i = 0;
while (i < 10) {
i++;
}
while과 유사하지만 일단 한 번 무조건 실행한다는 차이점이 있음.
// 초기값
// do {
// 증감
// } while (조건)
let i = 10;
do {
console.log(i);
} while (i < 10);
위 코드에서 while문의 조건이 성립되지 않지만 일단 한 번 실행되고 반복문이 종료됨.
break: 특정 조건에서 반복문을 종료시키는 문법.
continue: 특정 조건을 건너뛰는(다음 순서로 넘어가게 하는) 문법.