🎈 글쓰기에 앞서 해당 강의는 인프런에서 제공하는 "웹 프론트엔드를 위한 자바스크립트 첫 걸음" 강의의 내용을 토대로 학습한 내용입니다.
무료로 제공해주신 Hyobin 강사님께 감사의 말씀을 드립니다. 😄
✨ 챕터
🟩 자료형이란 변수를 선언하는 타입의 종류를 의미한다.
JavaScript
에서의 자료형은 원시 타입과 비 원시 타입으로 나뉜다.
원시 타입
Integer
BigInt
Null
String
Boolean
Undefined
Symbol
비 원시 타입
Object
)Function
, Array
등그렇다면 원시 타입과 비 원시 타입의 차이점은 무엇일까?
원시타입 자료형은 프로그램이 실행되는 도중에는 단 하나의 값 만을 갖고 있는 자료형이다.
비 원시 타입은 원시타입 자료형의 반대의 의미이다.
다음 코드에서 차이점을 알 수 있다.
/* 원시 타입 ✅ */
let number = 2000;
number = "2000";
/* 비 원시 타입 */
let arr = [1, 2, "3", 4, "5"];
// 하나의 배열 안에 서로 다른 타입의 값이 들어가 있음.
🟩
JavaScript
에서는 문자열 변수를 선언 할 때 총 3가지로 나뉜다.
let myName_0 = 'Lee Jae Chan'; // 작은 따옴표
let myName_1 = "Lee Jae Chan"; // 큰 따옴표
let myName_0 = `Lee Jae Chan`; // 역 따옴표(백틱)
작은 따옴표와 큰 따옴표의 차이점은 크게 없지만 역 따옴표의 경우 다른 변수의 값을 문자열 안에서도 활용하고 싶을 때 사용한다.
let myName = "Jae Chan";
let introMyName = `제 이름은 ${myName} 입니다 :)` ;
console.log(introMyName);
>>> 제 이름은 Jae Chan 입니다 :)
위의 코드에서 확인할 수 있듯 myName
으로 선언한 변수가 introMyName
에 들어가 출력 된 것을 알 수 있다.
Boolean
🟩
Boolean
타입의 경우 값이True
또는False
만 존재한다.
다음과 같이 활용할 수 있다.
let isTrue = true;
if (isTrue) {
console.log("참 !");
} else {
console.log("거짓 -_-");
}
>>> 참 !
Null
🟩
Null
이란 현재 값이 비어있다는 의미이다.
let thisValue = null;
console.log(thisValue);
>>> null
undefined
🟩
undefined
란Null
과는 다르게 현재 변수에 값이 할당되지 않았을 경우의 값이다.
let myNumber;
console.log(myNumber);
>>> undefined
🟩
JavaScript
에서는 두 변수의 값만 비교하는 연산자가 있고
두 변수의 값 뿐만 아니라 자료형 까지 같은지 비교하는 연산자가 존재한다.
다음 코드에서 예시를 확인해보자.
let num1 = 10;
let num2 = "10"
console.log(num1 === num2); -> false
console.log(num1 == num2); -> true
null
병합 연산자🟩
null
병합 연산자란 현재 값이null
또는undefined
일 경우 출력할 값을 지정해주는 연산자이다.
선언하는 방법은 ??
를 이용한다.
let myName;
myName = myName ?? "Jae Chan";
console.log(myName);
>>> Jae Chan;
위의 코드에서는 myName
에 할당한 값이 없기 때문에(undefined
) 출력 결과가 Jae Chan
임을 알 수 있다.
여기서 myName
변수에 값을 할당할 경우 결과를 확인해보겠다.
let myName = "이재찬";
myName = myName ?? "Jae Chan";
console.log(myName);
>>> 이재찬
이처럼 값이 존재할 경우 해당 값이 그대로 출력됨을 알 수 있다.
🟩 함수란, 같은 동작을 하는 중복된 코드가 존재할 경우
이들을 하나로 묶어 하나의 명령으로 실행할 수 있게 해주는 기능
예를 들어 아래 코드는 더하기가 여러 번 사용 된 경우인데 이를 함수를 이용해 줄여줄 수 있다.
let num1 = 10;
let num2 = 20;
let addNum = num1 + num2;
>>> 30
let num3 = 20;
let num4 = 40;
let addNum2 = num3 + num4;
>>> 60
자바스크립트에서 함수를 사용할 때 function
키워드를 사용한다.
/* */
function calc(a, b) {
return a + b;
}
let num = calc(10, 20);
console.log(num);
>>> 30
위의 함수는 매개 변수로 2개의 값을 전달받은 후 각 변수끼리 더한 값을 return
한다.
🟩 스코프란 변수 또는 함수가 사용되는 유효 범위를 뜻 한다.
스코프의 종류는 총 4가지이다.
어디서든지 해당 변수에 접근 가능한 범위를 의미한다.
let global = 0; // 전역 변수
function add(a, b) {
global = a + b;
}
add(20,30);
console.log(global);
>>> 50
해당 변수를 선언한 지역을 벗어난 곳에서는 접근 불가능하다.
function add(a, b) {
let localVal = a + b;
return localVal;
}
console.log(localVal); // ❌ 함수 내부에서만 사용 가능한 지역 변수임
'localVal' is not defined. (no-undef)
말 의미 그대로 블록 내에서만 사용 가능한 변수이다.
function testBlock() {
for(let i = 0; i < 10; i++) {
console.log(`테스트 : ${i}`); // ✅ 블록 범위 내의 존재하는 변수인 i
}
console.log(`테스트 : ${i}`); // ❌ 블록 내에서만 존재하는 변수
}
🟩 아직 선언되지 않은 함수나 변수들을 해당 스코프의 맨 위로 올려 사용하는 방식이다.
testHoisting(); // 호이스팅 사용. 아직 선언 안됨.
function testHoisting() {
console.log("호이스팅 테스트");
}
위에서 다뤘던 함수의 경우 함수 선언식 표현이다.
/* 함수 선언식 */
function printTest() {
console.log("Hello World !");
}
printTest();
JavaScript
에서는 함수 표현식을 이용해 함수를 만들수 있다.
/* 함수 표현식 */
let printTest = function () {
console.log("Hello World !");
}
printTest();
그렇다면 두 표현의 차이점은 무엇일까? 바로 호이스팅 가능 여부이다.
함수 선언식
printTest(); // hello World !
let printTest = function () {
console.log("Hello World !");
}
함수 표현식
printTest(); // ❌ printTest is not a function
let printTest = function () {
console.log("Hello World !");
}
Javascript
에서는 화살표형 함수라는 것을 통해 함수 표현을 더욱 간결하게 작성이 가능하다.
const printTest() => {
console.log("아 배고파.");
}
printTest();
>>> 아 배고파.
🟩 콜백 함수란, 다른 함수에 매개변수로 넘겨준 함수를 의미한다.
용어가 헷갈릴 수 있는데 좀 더 쉽게 설명하면 함수의 매개변수로 또 다른 함수를 받는 것을 의미한다.
아래 예시를 통해 콜백 함수가 무엇인지 봐보자.
/* 매개변수가 2개. */
function testCallBack(userName, callback) {
console.log(`Hello ${userName} !`); // 첫 번째 매개변수.
callback(); // 두 번째 매개변수로 또 다른 함수를 받는다.
}
function test() {
console.log("이거 콜백 함수야 !");
}
testCallBack("이재찬", test);
>>> Hello 이재찬 !
이거 콜백 함수야 !
이처럼 함수의 인자로 또 다른 함수를 받는 것을 콜백 함수라고 한다.
JavaScript
의 객체 선언 방식은 총 두가지이다.
let person = new Object(); // 객체 생성자
let person = {}; // 객체 리터럴
객체의 속성은 Key
와 Value
한 쌍으로 이루어져 있으며 :
로 구분한다.
다음 코드를 통해 알아보자.
let User = {
userName: "이재찬", // Key : userName , Value : 이재찬
age: 24, // Key : age , Value : 24
sex: "Male" // Key : sex , Value : Male
};
console.log(User);
>>> {userName: "이재찬", age: 24, sex: "Male"}
여기서 객체의 속성을 각각 꺼내어 사용도 가능하다.
let User = {
userName: "이재찬",
age: 24,
sex: "Male"
};
console.log(User.userName);
console.log(User.age);
console.log(User.sex);
>>> 이재찬
24
Male
여기서 객체의 속성을 꺼낼 때 .
으로 선언하였으나 []
로 또한 표기 가능하다.
console.log(User["userName"]);
>>> 이재찬
괄호 표기법은 객체의 Key
와 Value
의 특징을 이용해 다음과 같이 활용 가능하다.
let Pet = {
name: "Shiba",
type: "Dog",
age: 10
};
/** 객체의 Value를 가져오는 함수 선언 */
const getValue = (key) => {
console.log(Pet[key]);
};
getValue("name");
getValue("type");
>>> Shiba
Dog
JavaScript
의 객체 내부의 Key
값에는 함수를 선언할 수 있는데 이를 메소드라 칭한다.
다음 코드를 통해 메소드 예시를 봐보자.
const User = {
userName: "이재찬",
userID: 20000731,
userBlog: "https://velog.io/@jaepal",
print: function () {
console.log("Hello !"); // 객체 메소드
}
};
/* 사용법 */
User.print();
>>> Hello !
이를 활용해 객체 메소드를 이용해 객체 속성을 출력하는 것을 작성해보겠다.
여기서 주의할 점은 총 두 가지이다.
function
키워드를 사용해야 한다.this
키워드를 사용해 선언 해야한다.const User = {
userName: "이재찬",
userID: 20000731,
userBlog: "https://velog.io/@jaepal",
print: function () {
console.log(`안녕하세요 유저 ${this.userName} 님!`); // 객체 프로퍼티 접근할 경우 this 키워드 사용.
}
};
User.print();
>>> 안녕하세요 유저 이재찬 님!
Array
)🟩 배열이란 여러 개의 항목들이 모여있는 리스트, 순서가 있는 요소들의 집합을 의미한다.
배열의 선언은 []
중괄호로 선언한다.
const arr = [1,2,3];
배열 내부에는 여러 타입의 값들을 넣을 수 있다.
const arr = ["이재찬" , 7, null];
배열 내부의 요소 값들을 꺼내기 위해 다음과 작성한다.
let name = arr[0];
>>> 이재찬
주의 사항 ❗
배열의 첫번 째 요소의 인덱스 번호는 0
부터 시작한다.
[1 , 2 , 3] => 인덱스 0의 값 : 1
인덱스 1의 값 : 2
인덱스 2의 값 : 3
기존 배열에 값을 추가할 때는 push
메소드를 통해 추가한다.
const arr = [1,2,3];
arr.push(4);
console.log(arr[3]);
>>> 4
여기서 push
의 경우는 배열의 마지막 요소에 값을 추가한 것을 알 수 있다.
배열의 맨 첫번째 요소에 값을 추가하고 싶은 경우 unshift
메소드를 사용한다.
arr.unshift(0);
console.log(arr[0]);
>>> 0
키워드가 아닌 직접 값을 제어하고 싶으면 다음과 같이 작성한다.
const arr = [1,2,"포카칩"];
arr[0] = 100;
arr[2] = "프링글스";
console.log(arr);
>>> (3) [100, 2, "프링글스"];
배열의 요소를 제거하는 방법은 pop
메소드를 이용한다.
push
와 마찬가지로 배열의 맨 마지막 요소를 제거한다.
arr.pop();
console.log(arr);
>>> [100,2];
unshift
의 반대인 shift
는 배열의 맨 첫 번째 요소를 제거한다.
arr.shift();
console.log(arr);
>>> [2];
선언한 배열의 길이(요소 개수)를 알려면 length
메소드를 사용한다.
const arr = [1, 2, 3, 4, 5]; // 배열 내 요소 개수 : 5
const num = arr.length;
console.log(num);
>>> 5