
📅 2025-09-16
➡️ JavaScript에 대해 새롭게 알게 된 것 또는 헷갈리는 부분 정리 + 🤔❓
0""nullundefinedNaNfalsefalsy한 값을 제외한 모든 것let x = 10;
function printX(){
console.log(x);
}
printX(); // 10;
function printX(){
let x = 10;
console.log(x);
}
printX(); // 10
{} 중괄호 안에서만 접근 가능let, const는 블록 스코프를 따름. var는 무시let(true){
let x = 10;
console.log(x); // 10;
}
console.log(x); // ReferenceError : x is not defined
let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
let keys = Object.keys(person);
console.log(keys); // ["name", "age", "gender"]let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
let values = Object.values(person);
console.log(values); // ["홍길동", 30, "남자"]let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
let entries = Object.entries(person);
console.log(entries);let person = {
name: "홍길동",
age: 30,
gender: "남자"
};
let newPerson = Object.assign({}, person, { age: 35 });
console.log(newPerson); // { name: "홍길동", age: 35, gender: "남자" }let person1 = {
name: "홍길동",
age: 30,
gender: "남자"
};
let person2 = {
name: "홍길동",
age: 30,
gender: "남자"
};
console.log(person1 === person2); // false
console.log(JSON.stringify(person1) === JSON.stringify(person2)); // true
=== 연산자 사용 XJSON.stringify() 함수를 통해 객체를 문자열로 변환한 후, 비교let person1 = {
name: "홍길동",
age: 30
};
let person2 = {
gender: "남자"
};
let mergedPerson = {...person1, ...person2};
console.log(mergedPerson); // { name: "홍길동", age: 30, gender: "남자" }
...) 사용let user = {
"first name": "홍길동",
"user-age": 30,
"favorite food": "라면"
};
// 점 표기법으로는 접근 불가
// console.log(user.first name); // SyntaxError
// console.log(user.user-age); // NaN (user - age로 계산됨)
// 대괄호 표기법 사용
console.log(user["first name"]); // "홍길동"
console.log(user["user-age"]); // 30
console.log(user["favorite food"]); // "라면"element.classList.add('className1')
element.classList.add('className1', 'className2') // 여러 개도 가능
...)을 활용하여 여러 개의 값을 한 번에 추가할 수 있음const classes = ["a", "b", "c"];
element.classList.**add**(...classes);element.classList.remove('className1')
element.classList.remove('className1', 'className2') // 여러 개도 가능
...)을 활용하여 여러 개의 값을 한 번에 제거할 수 있음element.classList.contains('className')
true, false 반환element.classList.toggle('className'[, force])
add, 있으면 remove를 자동 실행false 반환true 반환forcetrue 또는 false의 값을 가짐true면 강제로 추가false면 강제로 제거❗ 따라서 복사본을 수정하면 원본도 영향을 받을 수 있음
const original = { a: 1, b: { c: 2 } };
// 얕은 복사
const shallowCopy = Object.assign({}, original);
shallowCopy.b.c = 42;
console.log(original.b.c); // 42 (원본도 같이 바뀜!)
...obj), Array.prototype.concat(), Array.prototype.slice(), Array.from(), Object.assign()const original = { a: 1, b: { c: 2 } };
// 깊은 복사
const deepCopy = structuredClone(original);
deepCopy.b.c = 42;
console.log(original.b.c); // 2 (원본은 그대로)
structuredClone(obj) (최신, 권장)JSON.parse(JSON.stringify(obj)) (❗제한 있음: 함수, undefined, Symbol 손실)📎 https://developer.mozilla.org/ko/docs/Web/API/Element/classList
📎 https://developer.mozilla.org/ko/docs/Glossary/Shallow_copy