중첩된 객체의 프로퍼티에 접근하려다 해당 객체가 undefined 또는 null인 경우, 접근 시도는 에러(TypeError)를 발생시킵니다.
let user = {}; // 중첩된 객체 프로퍼티 없음
console.log(user.address.street);
브라우저에서 DOM 요소에 접근하거나 존재하지 않는 프로퍼티에 접근하려는 경우에도 문제가 발생할 수 있습니다.
let html = document.querySelector('.non-existent').innerHTML;
let user = {};
console.log(user?.address?.street); // undefined
let user1 = {
greet() {
console.log("Hello!");
},
};
let user2 = {};
user1.greet?.(); // "Hello!"
user2.greet?.(); // 아무 일도 일어나지 않음
let user = { name: "Alice" };
let key = "name";
console.log(user?.[key]); // "Alice"
console.log(user?.[key]?.nonExistent); // undefined
let user = { name: "Alice" };
delete user?.name; // user.name을 삭제
user?.name = "Alice";
// SyntaxError: Invalid left-hand side in assignment
let user = null;
console.log(user?.address?.street); // undefined
// 논리적으로 user는 반드시 있어야 하는 상황이라면, 이 코드는 문제를 감춥니다.
const result = value1 ?? value2;
// value1이 null 또는 undefined이면 value2를 반환.
// 그렇지 않으면 value1을 반환.
const name = null;
const displayName = name ?? "Anonymous";
console.log(displayName); // "Anonymous"
const userScore = 0;
const score = userScore ?? 50;
console.log(score); // 0
const port = process.env.PORT ?? 3000;
console.log(port); // 환경 변수 PORT가 없으면 3000 반환
const user = null;
const userName = user?.name ?? "Anonymous";
console.log(userName); // "Anonymous"
const result = null || null ?? "default"; // SyntaxError
const resultFixed = (null || null) ?? "default"; // "default"
//환경 설정
const config = {
apiEndpoint: process.env.API_ENDPOINT ?? "https://default-api.com",
port: process.env.PORT ?? 8080,
};
console.log(config);
//사용자 입력 처리
function greet(userInput) {
const name = userInput ?? "Guest";
console.log(`Hello, ${name}!`);
}
greet(null); // "Hello, Guest!"
greet("Alice"); // "Hello, Alice!"