Frontend/Javascript-deepdive

Javascript - Control Statement, Object Literal

취업하고싶다! 2025. 12. 17. 17:08
반응형

 

 

제어문 개요

제어문은 조건에 따라 코드 블록을 실행하거나 반복 실행할 때 사용한다.
  • 제어문은 코드의 실행 흐름을 인위적으로 제어할 수 있다. -> 순차적으로 진행하는 직관적인 코드의 흐름을 혼란스럽게 만든다.
  • 제어문은 코드의 흐름을 이해하기 어렵게 만들어 가독성을 해치는 단점이 있다. -> 가독성이 좋지 않은 코드는 오류를 발생시키는 원인

cf) forEach(), map(), filter(), reduce() 와 같은 고차 함수를 사용한 함수형 프로그래밍 기법에서는 제어문 사용을 억제해 복잡성을 해결하려 한다.

 

 

객체 리터럴

자바스크립트는 객체 기반의 프로그래밍 언어
  • 원시값을 제외한 나머지 값(함수, 배열, 정규 표현식 등)은 모두 객체
  • 원시 타입은 하나의 값만 나타내지만 객체 타입은 다양한 타입의 값을 하나의 단위로 구성
  • 원시값은 변경 불가(immutable)한 값이지만, 객체는 변경 가능(mutable)한 값
  • 객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 key, value로 구성
  • JS에서 함수도 프로퍼티의 값으로 설정 가능 -> 메서드라고 함
var myObj = {
  num: 0, // 프로퍼티
  increase: function () { ... } // 메서드
}
  • 프로퍼티: 객체의 상태를 나타내는 값(data)
  • 메서드: 프로퍼티(상태 데이터)를 참조하고 조작할 수 있는 동작(behavior)

 

자바스크립트는 프로토타입 기반 객체지향 언어
  • 자바와 같은 클래스 기반 객체지향 언어와 달리, 다양한 객체 생성 방법을 지원
    • 객체 리터럴, object 생성자 함수, 생성자 함수, Object.create 메서드, 클래스(ES6)

 

 

객체 리터럴을 사용한 객체 생성

  • 중괄호 { ... } 내에 0개 이상의 프로퍼티를 정의
  • 변수에 할당되는 시점에 자바스크립트 엔진은 객체 리터럴을 해석해 객체를 생성
var person = {
  name: 'JIOH',
  sayHello: function() {
    console.log(`Hello My name is ${this.name}`);
  },
};

console.log(typeof person); // object
console.log(person); // { name: 'JIOH', sayHello: [Function: sayHello] };

 

 

프로퍼티

객체는 프로퍼티의 집합, 프로퍼티는 key, value로 구성
  • key: 빈 문자열을 포함하는 모든 문자열 또는 심벌 값
  • value: JS에서 사용할 수 있는 모든 값

 

프로퍼티 키는 프로퍼티 값에 접근할 수 있는 이름으로서 식별자 역할

  • 하지만 반드시 식별자 네이밍 규칙을 따라야하는 것은 아니다.
  • 자바스크립트에서 사용 가능한 유요한 이름인 경우, 따옴표( ''or") 를 생략할 수 있다.
  • 반대로 말하면 식별자 네이밍 규칙을 따르지 않는 이름에는 반드시 따옴표를 사용해야 한다.
var person = {
  firstName: 'Young-min',  // 식별자 네이밍 규칙을 준수한 프로퍼티 키
  'last-name': 'WI',       // 식별자 네이밍 규칙을 준수하지 않은 프로퍼티 키 ( 따옴표를 사용해 문자열 형태 유지 )
  last-name: 'WI'          // SyntaxError: Unexpected token ( 식별자 네이밍 규칙을 준수하지 않은 프로퍼티 키 ( 따옴표를 사용하지 않을 경우 - 표현식으로 해석 ) )
};
  • 프로퍼티에 문자열이나 심벌 값 외의 값을 사용하면 암묵적 타입 변환을 통해 문자열이 된다.
  • 이미 존재하는 프로퍼티 키를 중복 선언하면 나중에 선언한 프로퍼티가 먼저 선언한 프로퍼티를 덮어쓴다. ( 에러 발생 X)

 

 

메서드

자바스크립트에서 함수는 값으로 취급 가능 -> 프로퍼티 값이 함수일 경우 일반 함수와 구분하기 위해 메서드라고 한다.

 

 

 

프로퍼티 접근 방법

  • 마침표 표기법: 마침표(.) 프로퍼티 접근 연산자 사용
  • 대괄호 표기법: 대괄호([...]) 프로퍼티 접근 연산자 사용
var person = {
  name: "WI",
};

console.log(person.name); // "WI" ( 마침표 표기법 )
console.log(person["name"]); // "WI" ( 대괄호 표기법 )

// 대괄호 프로퍼티 접근 연산자 내에 문자열 형태가 아닌 프로퍼티 키로 사용하면 자바스크립트 엔진은 "식별자"로 해석
console.log(person[name]); // ReferenceError: name is not defined

// 객체에 존재하지 않는 프로퍼티에 접근시 -> undefined
console.log(person.age); // undefined

 

 

 

프로퍼티 동적 생성, 삭제

var person = {
  name: "WI",
};

person.age = 100; // { age: 100 } 프로퍼티 동적 생성
console.log(person); // { name: 'WI', age: 100 }

delete person.age; // age 라는 프로퍼티 키가 있고 -> 해당 프로퍼티 삭제
delete person.job; // job 이라는 프로퍼티 키는 없음 -> 그럼에도 delete 연산시 에러 발생 X

console.log(person); // { name: 'WI' }

 

반응형

'Frontend > Javascript-deepdive' 카테고리의 다른 글

Javscript - Function  (0) 2025.12.21
Javascript - Primitive Type, Object Type  (0) 2025.12.21
Javascript - Operator  (0) 2025.12.17
Javascript - Expression Statement  (0) 2025.12.16
Javascript - Variable  (0) 2025.12.16