[JavaScript] nomadcoders 바닐라 JS πŸ’› 1κ°•~5κ°• μš”μ•½

μœ€ν˜„μ„œΒ·2024λ…„ 5μ›” 19일

JavaScript

λͺ©λ‘ 보기
5/7

1. μ½˜μ†”μ— 값을 좜λ ₯ν•˜λŠ” 방법

console.log(좜λ ₯λ‚΄μš©) λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ„œ μ½˜μ†”μ— λ©”μ„Έμ§€λ‚˜ λ³€μˆ˜κ°’μ„ 좜λ ₯ν•©λ‹ˆλ‹€.
μ½˜μ†”μ€ νŽ˜μ΄μ§€ 우클릭 > 검사 > 상단 메뉴바 Console 을 톡해 μ—΄ 수 μžˆμŠ΅λ‹ˆλ‹€.

console.log("String:", "Hello, world!");
console.log("Number:", 1234);
console.log("Object:", {name: "youn", age: 22});
console.log("Array:", [1, 2, 3, 4]);

μ½˜μ†” 좜λ ₯ κ²°κ³Ό

2. Object(객체)에 λŒ€ν•΄μ„œ

κ°μ²΄λŠ” λ‹€μ–‘ν•œ property(속성)κ³Ό function(λ©”μ„œλ“œ)λ₯Ό κ°€μ§ˆ 수 있으며, 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 기본적인 λ‹¨μœ„λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

//Object(객체)
const person = { 
  	//property(속성)
    name: "youn", 
    age: 22, 
  	//function(λ©”μ„œλ“œ)
    greet: function() {
        console.log("Hello, " + this.name);
    }
};
//객체 μ‚¬μš©ν•˜κΈ°
console.log(person.name); // "youn"
console.log(person.age);  // 22
person.greet();           // "Hello, youn"

3. const와 let의 차이점

JavaScriptμ—μ„œ const와 let은 λͺ¨λ‘ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. ν•˜μ§€λ§Œ μž¬ν• λ‹Ή κ°€λŠ₯성에 μžˆμ–΄ 차이가 μžˆμŠ΅λ‹ˆλ‹€.

let으둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” μƒˆλ‘œμš΄ κ°’μœΌλ‘œ μž¬ν• λ‹Ήν•  수 μžˆμŠ΅λ‹ˆλ‹€.

let y = 5;
y = 20; // μœ νš¨ν•¨
console.log(y); // 20

const둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” 초기 ν• λ‹Ή 이후에 μž¬ν• λ‹Ήν•  수 μ—†μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ κ°μ²΄λ‚˜ 배열인 경우, 객체의 μ†μ„±μ΄λ‚˜ λ°°μ—΄μ˜ μš”μ†ŒλŠ” λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

const b = 10; //λ³€μˆ˜μΌ λ•Œ
b = 20; // μž¬ν• λ‹Ή λΆˆκ°€λŠ₯
//
const obj = { key: 'value' }; //객체일 λ•Œ
obj.key = 'newValue'; // 속성은 λ³€κ²½ κ°€λŠ₯
console.log(obj.key); // 'newValue'
//
const arr = [1, 2, 3]; //배열일 λ•Œ
arr.push(4); // μš”μ†Œ λ³€κ²½ κ°€λŠ₯
console.log(arr); // [1, 2, 3, 4]

4. NaN이 무엇인가?

"Not-a-Number"의 μ•½μžλ‘œ, μˆ«μžκ°€ μ•„λ‹Œ 값을 λ‚˜νƒ€λ‚΄λŠ” νŠΉμˆ˜ν•œ κ°’μž…λ‹ˆλ‹€.

  • NaN의 μžλ£Œν˜• : number
  • NaN 값을 ν™•μΈν•˜λ €λ©΄ Number.isNaN() λ˜λŠ” isNaN() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
    console.log(Number.isNaN(NaN)); // true
    console.log(isNaN(NaN));        // true
  • NaN은 자기 μžμ‹ κ³Όλ„ κ°™μ§€ μ•Šμ€ μœ μΌν•œ κ°’μž…λ‹ˆλ‹€.
    console.log(NaN === NaN); // false

5. null과 undefined의 차이점

nullκ³Ό undefinedλŠ” λͺ¨λ‘ 값이 μ—†μŒμ„ λ‚˜νƒ€λ‚΄μ§€λ§Œ, μ˜λ―Έμ™€ μš©λ„κ°€ λ‹€λ¦…λ‹ˆλ‹€.

undefined

  • λ³€μˆ˜λ₯Ό μ„ μ–Έν–ˆμ§€λ§Œ 값을 ν• λ‹Ήν•˜μ§€ μ•Šμ•˜μ„ λ•Œ
let x;
console.log(x); // undefined
  • 객체에 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 속성에 μ ‘κ·Όν•  λ•Œ
let obj = { name: "Alice" };
console.log(obj.age); // undefined
  • λ°˜ν™˜κ°’μ΄ μ—†λŠ” ν•¨μˆ˜
function greet() {
    console.log("Hello");
}
let result = greet();
console.log(result); // undefined
  • ν•¨μˆ˜ ν˜ΈμΆœν•  μ‹œ 인자λ₯Ό μ œκ³΅ν•˜μ§€ μ•Šμ•˜μ„ λ•Œ
function printMessage(message) {
    console.log(message);
}
printMessage(); // undefined

null

  • μ˜λ„μ μœΌλ‘œ λΉ„μ–΄μžˆμŒ
    null은 μ˜λ„μ μœΌλ‘œ 값이 μ—†μŒμ„ λ‚˜νƒ€λ‚Ό λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. ν˜„μž¬ 값이 μ—†μ§€λ§Œ λ‚˜μ€‘μ— κ°€μ§ˆ 수 μžˆμŒμ„ λͺ…ν™•νžˆ ν•©λ‹ˆλ‹€.
let y = null;
console.log(y); // null
  • 객체의 μ΄ˆκΈ°ν™”
    λ³€μˆ˜κ°€ λ‚˜μ€‘μ— 객체λ₯Ό 가리킬 κ²ƒμž„μ„ λͺ…ν™•νžˆ ν•˜κΈ° μœ„ν•΄ null둜 μ΄ˆκΈ°ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
let obj = null;
// λ‚˜μ€‘μ— obj에 객체λ₯Ό ν• λ‹Ήν•  κ³„νš
obj = { name: "youn" };

null vs undefined

  1. νƒ€μž…
    undefinedλŠ” undefined νƒ€μž…μž…λ‹ˆλ‹€.
    null은 object νƒ€μž…μž…λ‹ˆλ‹€.

+) λ‘˜ λ‹€ μžλ£Œν˜•μΌκΉŒ?

undefined와 null λͺ¨λ‘ μžλ£Œν˜•μ΄λΌκ³  ν•  수 μžˆμ§€λ§Œ, κ·Έ νƒ€μž…μ€ λ‹€λ¦…λ‹ˆλ‹€!
undefinedλŠ” κ·Έ 자체둜 μžλ£Œν˜•μ΄κ³ , null은 object νƒ€μž…μœΌλ‘œ λΆ„λ₯˜λ˜μ§€λ§Œ, μ΄λŠ” 역사적인 이유 λ•Œλ¬Έμž…λ‹ˆλ‹€.

console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object"
  1. μ˜λ„
    undefined λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μžλ™μœΌλ‘œ ν• λ‹Ήν•˜λŠ” κ°’μž…λ‹ˆλ‹€.
    null은 ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ˜λ„μ μœΌλ‘œ ν• λ‹Ήν•˜λŠ” κ°’μœΌλ‘œ, λ³€μˆ˜κ°€ ν˜„μž¬ 아무 값도 κ°€μ§€κ³  μžˆμ§€ μ•ŠμŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

6. ===과 ==의 차이점

===와 ==λŠ” λͺ¨λ‘ 비ꡐ μ—°μ‚°μžμ΄μ§€λ§Œ, κ·Έ μž‘λ™ 방식에 차이가 μžˆμŠ΅λ‹ˆλ‹€.

===λŠ” μ—„κ²©ν•œ 동등 μ—°μ‚°μžλ‘œ νƒ€μž…κ³Ό 값이 λͺ¨λ‘ κ°™μ•„μ•Ό μ°Έ(true)을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

==λŠ” λŠμŠ¨ν•œ 동등 μ—°μ‚°μžλ‘œ κ°’λ§Œ λΉ„κ΅ν•˜λ©°, 비ꡐ 전에 νƒ€μž…μ„ μžλ™μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ κ²€μ‚¬ν•©λ‹ˆλ‹€.

0 vs false

console.log(0 === false); // false
console.log(0 == false); // true (falseκ°€ 숫자 0으둜 λ³€ν™˜λ¨)

null vs undefined

console.log(null === undefined); // false
console.log(null == undefined); // true (값이 μ—†μŒμ„ λ‚˜νƒ€λ‚΄λ―€λ‘œ κ°™λ‹€κ³  κ°„μ£Ό)

7. parseInt()κ°€ 무엇인가?

λ¬Έμžμ—΄μ„ μ •μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€!

parseInt(λ³€ν™˜ν•  λ¬Έμžμ—΄, nμ§„μˆ˜);

  • μ„ νƒμ μœΌλ‘œ nμ§„μˆ˜λ₯Ό μ§€μ •ν•  수 있으며, μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ λ¬Έμžμ—΄ ν˜•μ‹μ— 따라 10μ§„μˆ˜ λ˜λŠ” 16μ§„μˆ˜(0x/0X둜 μ‹œμž‘ μ‹œ)둜 ν•΄μ„λ©λ‹ˆλ‹€.
  • λ³€ν™˜ν•  수 μ—†λŠ” 경우 NaN을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
let num = parseInt("123");
console.log(num); // 123

8. getElementById, getElementByClassName, getElementByTagName

1. getElementById

  • μš©λ„: μ£Όμ–΄μ§„ ✨id μ†μ„±βœ¨μ„ κ°€μ§„ μš”μ†Œλ₯Ό 선택
  • 인자: 선택할 μš”μ†Œμ˜ id λ¬Έμžμ—΄
  • λ°˜ν™˜ κ°’: μ£Όμ–΄μ§„ id 값을 κ°€μ§„ 첫 번째 μš”μ†Œλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. μš”μ†Œκ°€ μ—†μœΌλ©΄ null을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
  • νŠΉμ§•: idλŠ” HTML λ¬Έμ„œμ—μ„œ μœ μΌν•΄μ•Ό ν•˜λ―€λ‘œ, λ°˜ν™˜λ˜λŠ” μš”μ†ŒλŠ” ν•˜λ‚˜μž…λ‹ˆλ‹€.
let element = document.getElementById("uniqueElement");
console.log(element); 
// html λ¬Έμ„œμ—μ„œ : <div id="uniqueElement"></div>

2. getElementsByClassName

  • μš©λ„: βœ¨μ£Όμ–΄μ§„ 클래슀 이름을 κ°€μ§„ λͺ¨λ“  μš”μ†Œβœ¨ 선택
  • 인자: 선택할 μš”μ†Œμ˜ 클래슀 이름 λ¬Έμžμ—΄
let elements = document.getElementsByClassName("myClass");
console.log(elements); 
// HTMLλ¬Έμ„œμ—μ„œ myClass 클래슀 이름 μš”μ†Œ μ „λΆ€ κ°€μ Έ 옴
 //<div class="myClass">Item 1</div>
 //<div class="myClass">Item 2</div>
 //<div class="myClass">Item 3</div>

3. getElementsByTagName

  • μš©λ„: βœ¨μ£Όμ–΄μ§„ νƒœκ·Έ 이름을 κ°€μ§„ λͺ¨λ“  μš”μ†Œβœ¨ 선택
  • 인자: 선택할 μš”μ†Œμ˜ νƒœκ·Έ 이름 λ¬Έμžμ—΄
 let elements = document.getElementsByTagName("p");
console.log(elements);
// HTMLλ¬Έμ„œμ—μ„œ pνƒœκ·Έ μ „λΆ€ κ°€μ Έ 옴
//<p>Paragraph 1</p>
//<p>Paragraph 2</p>
//<p>Paragraph 3</p>

9. ✨ querySelector와 querySelectorAll

  • μš©λ„: ✨CSS μ„ νƒμžβœ¨λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΉμ • 쑰건에 λ§žλŠ” μš”μ†Œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
  • μ‚¬μš© 방법: CSS μ„ νƒμžλ₯Ό 인자둜 λ°›μ•„ ν•΄λ‹Ήν•˜λŠ” μš”μ†Œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
  • 인자: CSS μ„ νƒμž
  • λ°˜ν™˜ κ°’: μ„ νƒν•œ 첫 번째 μš”μ†Œ(querySelector) λ˜λŠ” λͺ¨λ“  μš”μ†Œ(querySelectorAll)λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
let elementByQuery = document.querySelector("#uniqueElement");
let elementsByQueryAll = document.querySelectorAll(".myClass");

10. getElementBy μ‹œλ¦¬μ¦ˆμ™€ querySelector의 차이점

  1. 선택 방법:
    getElementBy μ‹œλ¦¬μ¦ˆ : id, 클래슀 이름, νƒœκ·Έ 이름 등을 κΈ°μ€€μœΌλ‘œ μš”μ†Œ 선택
    querySelector 및 querySelectorAll : πŸ’›CSS μ„ νƒμžπŸ’›λ₯Ό μ‚¬μš©ν•˜μ—¬ μš”μ†Œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

  2. μœ μ—°μ„±:
    querySelector 및 querySelectorAll은 CSS μ„ νƒμžλ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— 더 μœ μ—°ν•˜κ³  λ‹€μ–‘ν•œ 선택 기쀀을 μ œκ³΅ν•©λ‹ˆλ‹€.

11. preventDefault()λ₯Ό μ™œ μ“°λŠ”κ°€?

preventDefault() λ©”μ„œλ“œλŠ” 이벀트의 κΈ°λ³Έ λ™μž‘(Default)을 λ§‰λŠ” 데(prevent) μ‚¬μš©λ©λ‹ˆλ‹€.

loginForm.addEventListener("submit", onLoginSubmit);
function onLoginSubmit(event){/* μ—”ν„°λ‚˜ λ²„νŠΌμ„ λˆ„λ₯Ό λ•Œ λ°œμƒ */
    event.preventDefault();//event의 κΈ°λ³Έ 행동인 μƒˆλ‘œκ³ μΉ¨μ„ 방지함
}

12. setInterval이 무엇인가?

setInterval()은 반볡적인 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” 타이머 ν•¨μˆ˜μž…λ‹ˆλ‹€!

setInterval(λ°˜λ³΅ν•  ν•¨μˆ˜, μ‹€ν–‰ 간격(ms), ν•¨μˆ˜μΈμž1, ν•¨μˆ˜μΈμž2, ...);

πŸ“£ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ μ§€μ •ν•œ 간격이 μ§€λ‚œ ν›„ ν•¨μˆ˜λ₯Ό 처음 μ‹€ν–‰ν•˜λ―€λ‘œ, μ‹€ν–‰ 직후 ν•œ 번 μˆ˜ν–‰ 된 ν›„ 반볡 μˆ˜ν–‰λ˜κΈΈ λ°”λž€λ‹€λ©΄ setInterval μ‚¬μš© 전에 ν•¨μˆ˜ ν˜ΈμΆœμ„ ν•œ 번 ν•΄μ€˜μ•Όν•©λ‹ˆλ‹€!

function sayHello() {
    console.log("Hello, world!");
}

sayHello(); //싀행직후 λ°”λ‘œ ν•œ 번 μ‹€ν–‰
// 1μ΄ˆλ§ˆλ‹€ sayHello ν•¨μˆ˜λ₯Ό μ‹€ν–‰
let intervalId = setInterval(sayHello, 1000);

// 5초 후에 interval을 쀑지
setTimeout(function() {
    clearInterval(intervalId); // interval을 쀑지
}, 5000);

13.toggle이 무엇인가?

μ‘΄μž¬ν•˜λ©΄ μ œκ±°ν•˜κ³ , μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ μΆ”κ°€ν•˜λŠ” λ™μž‘μ„ 토글이라고 ν•©λ‹ˆλ‹€!
if문을 μ‚¬μš©ν•˜μ—¬ μ§€μ •ν•΄μ•Όν•˜λŠ” λ™μž‘μ„ κ°„λ‹¨ν•˜κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€!
element.classList.toggle("className");

/* if문으둜 κ΅¬ν˜„ν•˜κΈ° */
    if (h1.classList.contains(clickedClass)) { /* class listκ°€ clicked classλ₯Ό ν¬ν•¨ν•˜λŠ”κ°€? */
        h1.classList.remove(clickedClass);
    } else {
        h1.classList.add(clickedClass); //νŠΉμ • class만 μ‘°μž‘ν•˜κΈ°
    }
/* toggle둜 κ΅¬ν˜„ν•˜κΈ° (class list둜 κ΅¬ν˜„ν•œ μ½”λ“œμ™€ μ™„λ²½νžˆ κ°™μŒ) */
    h1.classList.toggle("clicked");

14. padStart()κ°€ 무엇인가?

padStart()λŠ” λ¬Έμžμ—΄μ„ νŠΉμ • 길이둜 μ±„μš°λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.
μ£Όμ–΄μ§„ 길이보닀 λ¬Έμžμ—΄μ˜ 길이가 짧은 경우 μ§€μ •λœ λ¬Έμžμ—΄μ„ μ‹œμž‘ 뢀뢄에 μΆ”κ°€ν•©λ‹ˆλ‹€!

λ¬Έμžμ—΄.padStart(λ¬Έμžμ—΄ 길이, [빈 λΆ€λΆ„ μ±„μšΈ λ¬Έμžμ—΄])

let str = "123";
console.log(str.padStart(5, "0")); // "00123"
console.log(str.padStart(7, "abc")); // "abcb123"
console.log(str.padStart(2)); // "123" (좜λ ₯ν•  λ¬Έμžμ—΄μ΄ μ§€μ •ν•œ λ¬Έμžμ—΄ 길이보닀 κΈΈκΈ° λ•Œλ¬Έμ—, 좜λ ₯ν•˜κ³ μž ν–ˆλ˜ λ¬Έμžμ—΄μ„ κ·ΈλŒ€λ‘œ 좜λ ₯함)
  • "7".padStart(20,"012345");

    7이 μžλ¦¬ν•  λ§ˆμ§€λ§‰ ν•œ 자리λ₯Ό μ œμ™Έν•œ 19자리λ₯Ό ν•¨μˆ˜μ˜ 인자둜 μ§€μ •ν•œ "012345"κ°€ μ—°μ†λ˜λ„λ‘ μ±„μ›λ‹ˆλ‹€.
  • "7".padStart(2, "012");

    7이 μžλ¦¬ν•  λ§ˆμ§€λ§‰ ν•œ 자리λ₯Ό μ œμ™Έν•œ 1자리λ₯Ό ν•¨μˆ˜μ˜ 인자둜 μ§€μ •ν•œ "012"κ°€ μ—°μ†λ˜λ„λ‘ μ±„μ›λ‹ˆλ‹€. ν•œ 자리만 μ—¬μœ κ°€ μžˆμœΌλ―€λ‘œ "012"쀑 0이 남은 1칸을 μžλ¦¬ν–ˆμŒμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • "789".padStart(2, "0");

    좜λ ₯ν•  λ¬Έμžμ—΄μ΄ 이미 μ§€μ •ν•œ λ¬Έμžμ—΄ 길이보닀 κΈΈκΈ° λ•Œλ¬Έμ—, 좜λ ₯ν•˜κ³ μž ν–ˆλ˜ λ¬Έμžμ—΄μ„ κ·ΈλŒ€λ‘œ 좜λ ₯ν•©λ‹ˆλ‹€!
profile
HUFS CSE 22 / TAB 42

0개의 λŒ“κΈ€