9~10. [Modern JS Deep Dive] 타입 변환, 객체 리터럴

민토의 블로그·2022년 6월 11일
1

JS Deep Dive

목록 보기
7/9
post-thumbnail

자바스크립트 Deep Dive 9장 10장에 해당하는 부분이고, 읽으면서 자바스크립트에 대해 새롭게 알게된 부분만 정리한 내용이다.

타입 변환

JS의 타입 변환에는 두가지가 존재한다. 개발자가 의도적으로 타입을 변환하는 명시적 타입 변환과 개발자의 의도와는 상관없이 자바스크립트 엔진에서 암묵적으로 타입이 자동 변환되는 암묵적 타입 변환이 있다.

하지만 타입 변환의 경우에는 기존 원시값을 직접 변경하는 건 아니다.

let x = '10';
let y = +x;

console.log(typeof x); // string
console.log(typeof y); // number

위 코드를 봐도 기존 x는 바뀌지 않는걸 확인할 수 있다.

타입 변환은 결국 같이 개발하는 과정에서 예상치 못한 변수의 변환으로 에러가 발생할 수 있기 때문에 최대한 지양해서 코드를 작성하는게 중요하다.

단축평가

논리합(||) 이나 논리곱(&&) 연산자의 경우 원래는 boolean 타입으로 변환해서 출력한다고 알고 있을텐데 자바스크립트 같은 경우에는 조금 다르다.

true || 'apple'; // true
false || 'apple'; // apple
true && 'apple'; // apple
false && 'apple'; // false

위 처럼 피연산자를 boolean으로 타입 변환 하지 않고 그대로 반환한다. 이런 특징을 단축평가라고 한다.

단축평가란 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는걸 의미한다.

객체란?

객체란 프로퍼티와 메서드로 구성된 집합체이다.

자바스크립트 같은 경우 프로토타입 기반 객체지향 언어로서 다양한 객체 생성 방법이 존재한다.

  1. 객체 리터럴
  2. Object 생성자 함수
  3. 생성자 함수
  4. Object.create 메서드
  5. Class 클래스(ES6)

객체 리터럴

객체 리터럴 같은 경우 표현식으로 표현되는 문이다. 그러므로 블록문이 아니라 ;을 붙혀야 한다. 그리고 객체 리터럴 방식으로 객체를 생성하면 new 연산자와 같이 생성자를 호출할 필요가 없다.

let person = {
  name: 'Minto'
  sayHello: function() {
    console.log('say hello!');
  }
};

그리고 자바스크립트에서 함수는 일급 객체이기 때문에 값으로 사용할 수 있다.

객체를 사용할 때 주의할점은 객체에 존재하지 않는 프로퍼티에 접근하면 에러가 아닌 undefined를 반환한다는 점이다.

let person = {
  name: 'Minto'
};

console.log(person.age); // undefined

프로퍼티의 삭제

프로퍼티의 삭제는 delete 키워드를 사용해서 할 수 있다.

let person = {
  name: 'Minto'
};

delete person.name;
delete person.age;

console.log(person); // {}

하지만 주의 할점은 객체에 없는 프로퍼티를 삭제 했을때 아무런 에러를 알려주지 않고 무시된다는 점이다.

profile
블로그 이전했습니다. https://frontend-minto.tistory.com/

0개의 댓글