🔶 JavaScript

  • 객체지향 프로그래밍이란 무엇인가?

: 전통적인 명령형 프로그래밍에서 벗어나 독립적 단위인 객체의 집합으로 프로그램을 표현하는 프로그래밍 패러다임
: 여기서의 객체는 속성의 집합이고 속성은 다시 상태와 동작으로 구분할 수 있는데, 상태를 프로퍼티, 동작을 메서드라고 부름
: 또한 객체는 다른 객체와 관계성을 가질 수 있기 때문에 메시지를 주고 받거나 다른 객체의 프로퍼티나 메서드를 상속 받아 사용할 수 있음

  • 상속이란 무엇인가?

: 객체지향 프로그래밍의 핵심 개념
: 어떤 객체의 프로퍼티, 메서드를 다른 객체가 상속 받아 그대로 사용할 수 있는 것

  • 상속을 왜 사용하는가?

: 코드의 재사용이라는 관점에서 유용하게 사용할 수 있음

  • 자바스크립트에서는 상속을 어떻게 구현하는가?

: 프로토타입을 기반으로 구현하여 불필요한 중복을 제거하는 방식
: 기존 생성자 함수는 인스턴스를 생성할 때마다 메서드도 생성한다는 단점이 있는데, 이를 상속으로 해결 가능
: 인스턴스가 공통적으로 사용할 프로퍼티와 메서드를 프로토타입에 구현해 두면, 인스턴스는 상위 객체인 프로토타입에서 상속 받아 사용 가능

  • 프로토타입 객체란 무엇인가?

: 프로토타입과 동일한 용어, 프로토타입도 객체이기 때문
: 자바스크립트에서 객체 간의 상속을 구현하기 위해 사용하는 개념
: 어떤 객체의 상위 객체 역할을 하며, 다른 객체에 공유 프로퍼티를 제공함
: 모든 객체가 가지고 있는 [[Prototype]] 내부 슬롯이 가리키는 것이 프로토타입 객체

  • 프로토타입 객체에 어떻게 접근할 수 있는가?

: 내부 슬롯이기 때문에 직접 접근은 불가능
: 인스턴스는 __proto__ 접근자 프로퍼티를 통해 간접적 접근 가능
: 생성자 함수는 자신이 가지고 있는 prototype 프로퍼티를 통해 접근 가능

  • 인스턴스에서 생성자 함수로 어떻게 접근할 수 있는가?

: 인스턴스의 프로토타입이 가지는 constructor 프로퍼티를 상속 받아 사용하면 생성자 함수로 접근 가능

  • __proto__ 접근자 프로퍼티란 무엇인가?

: 객체가 자신의 프로토타입, 즉 [[Prototype]] 내부 슬롯에 간접적으로 접근할 수 있는 방법

  • __proto__는 어떤 특징이 있는가?

: 접근자 프로퍼티이기 때문에 디스크립터 객체를 확인해보면 getter, setter 함수를 프로퍼티로 가짐
: __proto__로 프로토타입에 접근하면 getter 함수인 [[Get]] 호출, 새로운 프로토타입을 할당하면 setter 함수인 [[Set]] 호출
: __proto__객체가 직접 소유하는 프로퍼티가 아니라 모든 객체가 상속 받는 Object.prototype의 접근자 프로퍼티이고, 상속을 받기 때문에 자유롭게 사용 가능

  • Object.prototype이란 무엇인가?

: 모든 객체가 상속 받는 프로토타입, 이 객체의 프로퍼티와 메서드는 모든 하위 객체가 자유롭게 사용할 수 있음
: 프로토타입 체인의 종점에 위치한 최상위 프로토타입 객체

  • __proto__를 통해 프로토타입에 접근하는 이유는 무엇인가?

: 상호 참조에 의해 프로토타입 체인이 생성되는 것을 방지하기 위해, 즉 순환 참조에 의한 무한 루프 에러를 방지하기 위한 목적
: __proto__를 통해 프로토타입에 단방향으로 접근 및 교체하고 있는지 체크 가능

  • __proto__의 직접 사용을 권장하지 않는 이유는 무엇인가?

: 모든 객체가 __proto__ 를 상속 받아 사용할 수 있는 것은 아니기 때문에 에러가 발생할 위험이 있음
: 상속을 받지 않아도 되는 정적 메서드 Object.getPrototypeOf, Object.setPrototypeOf 사용하는 것이 바람직함

  • prototype 프로퍼티란 무엇인가?

: 함수 객체가 가지는 고유한 프로퍼티
: 생성자 함수가 생성할 인스턴스의 프로토타입을 가리킴

  • prototype 프로퍼티는 어떤 특징이 있는가?

: [[Construct]] 프로퍼티를 가지지 않는 메서드 축약 표현, 화살표 함수는 prototype 프로퍼티를 가지지 않고, 프로토타입도 생성하지 않음
: 생성자 함수와 마찬가지로 일반 함수도 prototype 프로퍼티를 가지긴 하지만, 객체를 생성하지 않기 때문에 prototype의 의미가 없음

  • protoype 프로퍼티와 __proto__ 접근자 프로퍼티를 통해 프로토타입에 접근하는 방법은 어떤 차이가 있는가?

: 가리키는 프로토타입은 생성자 함수의 prototype 프로퍼티로 동일
: 프로토타입 사용의 주체가 누군지의 차이가 있음
: prototype 프로퍼티는 생성자 함수가 자신이 생성할 인스턴스에 프로토타입을 할당하기 위해 사용
: __proto__ 접근자 프로퍼티는 인스턴스가 자신의 프로토타입에 접근 및 교체하기 위해 사용

  • 생성자 함수와 constructor 프로퍼티의 연결 시점은 언제인가?

: 생성자 함수의 정의가 평가될 때, 즉 함수 객체가 생성될 때 프로토타입의 constructor 프로퍼티와 연결됨

  • 인스턴스와 constuctor 프로퍼티는 어떤 관계가 있는가?

: 인스턴스는 프로토타입으로 생성자 함수의 prototype 프로퍼티와 연결되어 있으므로, constructor 프로퍼티를 사용하여 자신을 생성한 생성자 함수에 접근할 수 있음

  • 리터럴 표기법으로 생성한 객체는 프로토타입을 가지는가?

: new 연산자를 사용하여 생성자 함수를 거치지 않고 바로 객체를 생성하기 때문에 프로토타입이 존재하지 않을 것이라고 생각할 수 있음
: ECMAScript 사양에 명시된 추상 연산 OrdinaryObjectCreate이 관여하여 프로토타입이 생성됨
: 추상 연산에 의해 프로토타입과 연결됨으로써 가상적인 생성자 함수를 가지게 됨, 프로토타입은 생성자 함수와 함께 생성되고 prototypeconstructor 프로퍼티를 통해 서로 연결되어 있기 때문

  • 추상 연산이란 무엇인가?

: ECMAScript 사양에서 자바스크립트 엔진의 내부 동작 구현 알고리즘을 표현한 것

  • Object 생성자 함수로 생성하는 객체의 경우 호출된 OrdinaryObjectCreate는 어떻게 동작하는가?

: 인수가 전달되지 않았다면 연산 호출하여 빈 객체 생성
: 인수가 전달된 경우 인수를 객체로 변환하여 생성
: new.target이 undefined나 Object가 아닌 경우 중간에 인스턴스의 프로토타입을 삽입하여 프로토타입 체인 생성

  • 객체 리터럴로 생성하는 객체의 경우 호출된 OrdinaryObjectCreate는 어떻게 동작하는가?

: 첫 번째 매개변수로 생성할 객체의 프로토타입Object.prototype 지정
: 두 번째 매개변수는 옵션, 리터럴 안에 프로퍼티가 정의되어 있다면 객체 생성 시 이를 추가할 수 있음

  • 다양한 리터럴 표기법에 따라 생성자 함수와 프로토타입은 어떻게 연결되는가?

: 객체 리터럴인 경우 Object, Object.prototype 연결
: 함수 리터럴인 경우 Function, Function.prototype 연결
: 배열 리터럴인 경우 Array, Array.prototype 연결
: 정규 표현식 리터럴인 경우 RegExp, RegExp.prototype 연결

  • 프로토타입은 언제 생성되는가?

: 생성자 함수가 생성되는 시점에 함께 생성

  • 생성자 함수는 어떻게 구분할 수 있는가?

: 사용자 정의 생성자 함수, 빌트인 생성자 함수

  • 사용자 정의 생성자 함수의 경우 프로토타입이 언제 생성되는가?

: 함수의 정의가 평가되는, 즉 함수 객체가 생성되는 시점에 프로토타입 생성
: 생성자 함수가 함수 선언문으로 정의되었다면 소스코드 런타임 이전에 생성, 함수 표현식으로 정의되었다면 할당문 런타임 시 생성
: 프로토타입이 생성된 직후에는 constructor 프로퍼티만 가지고 있음
: 프로토타입도 객체이기 때문에 내부 슬롯인 [[Prototype]]Object.prototype을 가리키고 있음

  • 빌트인 생성자 함수의 경우 프로토타입이 언제 생성되는가?

: 빌트인 생성자 함수는 전역 객체가 생성되는 시점에 전역 객체의 프로퍼티로서 생성됨, 즉 프로토타입도 전역 객체가 생성되는 시점에 생성
: 결국 객체 생성 이전에 생성자 함수와 그 프로토타입은 이미 객체화되어 전역 객체의 프로퍼티로 포함되어 있음

  • 객체를 생성하는 방식에는 어떤 것들이 있는가?

: 객체 리터럴, Object 생성자 함수, 사용자 정의 생성자 함수, Object.create 메서드, 클래스

  • 객체 생성 방식의 공통점은 무엇인가?

: 세부적인 차이는 있지만, 전부 추상 연산 OrdinaryObjectCreate에 의해 생성됨

  • 객체의 프로토타입은 언제 결정되는가?

: OrdinaryObjectCreate의 동작 과정 중에 결정됨

(1) 추상 연산 OrdinaryObjectCreate는 필수적으로 자신이 생성할 객체의 프로토타입을 인수로 전달 받고, 생성할 객체에 추가할 프로퍼티 목록을 옵션으로 전달할 수 있음

(2) 일단 OrdinaryObjectCreate는 무조건 빈 객체를 생성

(3) 프로퍼티 목록을 전달 받았다면 객체에 프로퍼티를 추가함

(4) 전달 받은 프로토타입을 [[Prototype]]에 할당함, 결국 프로토타입은 OrdinaryObjectCreate에 전달되는 인수에 의해 결정됨, 이때의 인수는 객체 생성 방식에 따라 달라짐

  • 객체 리터럴에 의해 생성된 객체의 프로토타입은 무엇인가?

: 자바스크립트 엔진이 객체 리터럴을 평가할 때 OrdinaryObjectCreate 호출하고, 인수로 Object.prototype 전달함
: 결국 객체 리터럴에 의해 생성되는 객체는 Object.prototype을 프로토타입으로 가지고, Object.prototype을 통해 상속 받은 프로퍼티와 메서드 사용 가능

  • Object 생성자 함수에 의해 생성된 객체의 프로토타입은 무엇인가?

: 객체 리터럴에 의해 생성되는 객체와 구조는 동일, 마찬가지로 Object.prototype을 프로토타입으로 가짐
: 마찬가지로 Object.prototype을 통해 상속 받은 프로퍼티와 메서드 사용 가능

  • 객체 리터럴과 Object 생성자 함수의 객체 생성 방식에는 어떤 차이가 있는가?

: 프로퍼티의 추가 방식에 차이가 있음
: 객체 리터럴은 리터럴 내부에 프로퍼티를 추가하여 생성할 수 있음
: 생성자 함수는 일단 무조건 빈 객체를 생성하고, 그 후에 프로퍼티를 추가해야 함

  • 사용자 정의 생성자 함수에 의해 생성된 객체의 프로토타입은 무엇인가?

: new 연산자와 함께 생성자 함수를 호출하여 인스턴스 생성하면 OrdinaryObjectCreate가 호출되고, 인수로 생성자 함수의 prototype 프로퍼티에 바인딩된 객체(생성자 함수 이름.prototype)를 전달함
: 이때 생성자 함수와 prototype 프로퍼티에 바인딩된 객체 사이의 연결이 생성됨
: 그러므로 생성자 함수의 prototype 프로퍼티에 바인딩된 객체의 프로퍼티와 메서드 사용 가능, 그러나 생성한 직후에는 constructor 프로퍼티만 존재하기 때문에 contructor 프로퍼티만 상속 받아 사용 가능
: 프로토타입 체인을 통해 Object.prototpye의 프로퍼티와 메서드 역시 상속을 받아서 사용 가능

  • 프로토타입 체인이란 무엇인가?

: 내부 슬롯 [[Prototype]]에 바인딩된 객체끼리 연결되어 있는 것
: 자바스크립트 엔진이
프로퍼티를 검색하는 규칙**

  • 자바스크립트 엔진은 프로토타입 체인을 통해 구체적으로 프로퍼티를 어떻게 검색하는가?

: 먼저 메서드를 호출한 객체에서 검색, 없으면 객체에 바인딩된 프로토타입에서 검색
: 프로토타입 체인을 타고 올라가서 종점인 Object.prototype에서 검색하고, 만약 없으면 undefined 반환

  • 프로토타입 체인의 종점은 무엇인가?

: 모든 객체는 Object.prototype을 상속 받기 때문에, 프로토타입 체인의 최상위 객체는 Object.prototype
: 프로토타입 체인의 최상위 객체인 Object.prototype가 바로 종점
: 종점이기 때문에 Object.prototype[[Prototype]]에는 null이 할당되어 있음

  • 프로토타입 체인은 왜 존재하는가?

: 객체 간의 상속과 프로퍼티 검색을 위해

  • 스코프 체인과 프로토타입 체인은 어떤 차이가 있는가?

: 스코프 체인은 식별자를 검색하는 규칙
: 프로토타입 체인은 프로퍼티를 검색하는 규칙
: 두 규칙이 개별적으로 동작하는 것이 아니라 서로 협력하여 사용

  • 프로토타입 프로퍼티와 인스턴스 프로퍼티는 어떤 차이가 있는가?

: 프로토타입이 소유한 프로퍼티를 프로토타입 프로퍼티, 인스턴스가 소유한 프로퍼티를 인스턴스 프로퍼티라고 함

  • 오버라이딩이란 무엇인가?

: 상속 받은 프로토타입 프로퍼티를 인스턴스에 추가하는 경우 인스턴스 프로퍼티가 프로토타입 프로퍼티를 오버라이딩했다고 표현
: 즉 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의하여 사용하는 방식

  • 프로퍼티 섀도잉이란 무엇인가?

: 상속에 의해 프로토타입 프로퍼티가 인스턴스 프로퍼티에게 가려지는 현상을 의미함

  • 인스턴스 프로퍼티를 통해 프로토타입 프로퍼티를 삭제할 수 있는가?

: 오버라이딩한 인스턴스 프로퍼티를 통해 프로토타입 프로퍼티를 삭제할 수는 없음
: 즉 하위 객체에서 프로토타입에 get 메서드는 허용되지만, set 메서드는 허용되지 않음
: 프로토타입 프로퍼티를 변경하거나 삭제하려면 생성자 함수의 prototype 프로퍼티를 통해 직접 접근해야 함

  • 프로토타입의 교체란 무엇을 의미하는가?

: 프로토타입을 임의의 다른 객체로 변경하는 것, 즉 부모 객체인 프로토타입을 동적으로 변경할 수 있는 것을 의미함
: 프로토타입의 교체를 통해서 객체 간의 상속 관계를 동적으로 변경할 수 있음

  • 프로토타입은 어떻게 교체할 수 있는가?

: 생성자 함수에 의해 교체하거나, 인스턴스에 의해 교체할 수 있음

  • 생성자 함수에 의해 프로토타입을 어떻게 교체할 수 있는가?

: 생성자 함수의 prototype 프로퍼티에 프로토타입으로 사용할 임의의 객체를 할당하면 됨
: 교체하면 prototype의 프로퍼티로 할당한 객체에 constructor 프로퍼티가 존재하지 않기 때문에 생성자 함수와 constructor 프로퍼티 간의 연결이 파괴됨, 그 결과 인스턴스의 constructor 값은 인스턴스를 생성한 생성자 함수가 아닌, Object 생성자 함수를 가리킴

  • 생성자 함수에 의해 프로토타입을 교체할 때 constructor와 생성자 함수 간의 끊어진 연결을 어떻게 복구할 수 있는가?

: 생성자 함수의 prototype에 객체를 할당할 때 constructor 프로퍼티를 추가하면 됨(키에는 constructor, 값에는 생성자 함수 이름)

  • 생성자 함수에 의해 프로토타입을 어떻게 교체할 수 있는가?

: 인스턴스의 __proto__ 접근자 프로퍼티를 통해 프로토타입에 접근 가능
: 즉 프로토타입으로 사용할 임의의 객체를 __proto__set 메서드나 Object.setPrototypeOf 메서드의 매개변수로 설정하여 교체 가능
: 메서드의 매개변수로 설정한 객체에 constructor 프로퍼티가 없기 때문에 생성자 함수와 constructor 프로퍼티 간의 연결이 파괴됨, 그 결과 인스턴스의 constructor 값은 생성자 함수가 아닌, Object 생성자 함수를 가리킴

  • 인스턴스에 의해 프로토타입을 교체할 때 constructor와 생성자 함수 간의 끊어진 연결을 어떻게 복구할 수 있는가?

: 매개변수로 설정할 객체를 생성할 때 constructor 프로퍼티를 추가하면 됨(키에는 constructor, 값에는 생성자 함수 이름)
: 추가적으로 생성자 함수의 prototype 프로퍼티에 객체를 할당해주는 작업이 필요함

  • 프로토타입 교체 시 생성자 함수에 의한 방식과 인스턴스에 의한 방식은 어떤 차이가 있는가?

: 생성자 함수는 생성할 인스턴스의 프로토타입을 교체하는 것
: 인스턴스는 생성된 인스턴스의 프로토타입을 교체하는 것
: 생성자 함수는 prototype 프로퍼티의 값에 직접 접근하여 객체를 할당하기 때문에 프로퍼티의 값이 교체된 프로토타입을 가리키고 있음
: 인스턴스는 prototype 프로퍼티의 값으로 객체를 할당하는 것이 아니라, 객체를 프로토타입 자체로 만들어서 교체하기 때문에 생성자 함수의 prototype 프로퍼티가 교체된 프로토타입을 가리키지 않음

  • 프로토타입의 교체는 어떤 단점이 있는가?

: constructor 프로퍼티를 따로 추가하거나, prototype의 값으로 객체를 할당해주는 작업이 필요하기 때문에 번거로움
: 번거로움을 해결하기 위해 직접 상속, 클래스 사용

  • instanceof 연산자란 무엇인가?

: 이항 연산자로 좌변에 객체를 가리키는 식별자를, 우변에 생성자 함수를 가리키는 식별자를 피연산자로 각각 받음
: 우변의 피연산자가 함수가 아닌 경우 TypeError 발생

  • instanceof 연산자는 어떻게 동작하는가?

: 우변의 생성자 함수의 prototype 프로퍼티에 바인딩된 객체가 좌변의 객체의 프로토타입 체인 상에 존재하면 true, 아니면 false 반환함
: 인스턴스에서 프로토타입을 임의로 교체하는 경우에 교체 전 프로토타입에 바인딩되었던 생성자 함수는 false를 반환하게 됨
: 즉 생성자 함수의 prototype 프로퍼티에 바인딩된 객체가 프로토타입 체인 상에 존재하는지 확인
: 만약 생성자 함수에 의해 프로토타입을 교체하는 경우에는 생성자 함수와 교체된 프로토타입 간의 연결이 끊기지 않기 때문에 instanceof 반환 값에 영향을 주지 않음

  • 직접 상속의 방법에는 무엇이 있는가?

: Object.create 이용, 객체 리터럴 내부에서 __proto__ 이용

  • Object.create란 무엇인가?

: Object.create명시적으로 프로토타입을 지정하여 객체를 생성하는 방식
: 객체 리터럴, Object 생성자 함수와 마찬가지로 추상 연산 OrdinaryObjectCreate를 호출함

  • Object.create는 어떻게 동작하는가?

: 첫 번째 매개변수에 필수적으로 생성할 객체의 프로토타입으로 지정할 객체 전달
: 두 번째 매개변수에는 선택적으로 생성할 객체의 프로퍼티 키와 프로퍼티 디스크립터로 이뤄진 객체 전달
: 결과적으로 첫 번째 매개변수에 전달한 객체의 프로토타입 체인에 속하는 객체가 생성됨

  • Object.create의 장점은 무엇인가?

: new 연산자 필요 없음
: 프로토타입을 직접 지정하면서 동시에 객체 생성 가능
: 객체 리터럴에 의해 생성된 객체도 상속 받을 수 있음

  • 객체 리터럴 내부에서 __proto__ 를 이용하여 직접 상속을 구현하는 이유는 무엇인가?

: 기존 Object.create두 번째 매개변수로 프로퍼티를 추가하는 것이 번거로움
: 객체 리터럴 내부에서 직접 상속을 구현하면 프로퍼티를 간편하게 추가함으로써 이를 해결할 수 있음

  • 객체 리터럴 내부에서 __proto__ 를 이용하여 어떻게 직접 상속을 구현할 수 있는가?

: 객체 내부에 __proto__ 접근자 프로퍼티를 정의하고, 그 값으로 직접 상속을 구현할 객체를 할당함
: ES6 이후부터 사용 가능한 방법임

  • 정적 프로퍼티/메서드란 무엇인가?

: 생성자 함수로 인스턴스를 생성하지 않아도 참조, 호출할 수 있는 프로퍼티/메서드를 의미함
: 생성자 함수도 객체이기 때문에 자기 자신의 프로퍼티/메서드를 소유할 수 있는데, 이것이 바로 정적 프로퍼티/메서드
: 정적 프로퍼티/메서드는 인스턴스의 프로토타입 체인에 존재하지 않기 때문에 인스턴스가 참조할 수 없음

  • 어떤 경우에 정적 프로퍼티/메서드로 변경할 수 있는가?

: 인스턴스/프로토타입 메서드 내에서 this를 사용하지 않는 경우 정적 메서드로 변경할 수 있음
: this가 가리키는 것이 인스턴스이므로, 굳이 참조할 필요가 없다면 정적 메서드로 변경해도 정상 동작하기 때문

  • 정적 프로퍼티/메서드로 어떻게 변경할 수 있는가?

: 중간에 prototype 프로퍼티를 체이닝하는 과정을 거치지 않으면 됨
ex) Foo.prototype.xFoo.x

  • 정적 프로퍼티/메서드와 프로토타입 프로퍼티/메서드를 어떻게 구분할 수 있는가?

: 표기법 자체가 다름
: prototype 프로퍼티를 중간에 체이닝하고 있다면 프로토타입 프로퍼티/메서드, 아니라면 정적 프로퍼티/메서드
: 중간에 체이닝된 prototype 프로퍼티를 #으로 표기하는 경우도 있음

  • 프로퍼티의 존재를 확인하는 방법에는 무엇이 있는가?

: in 연산자, Object.prototype.hasOwnProperty 메서드

  • in 연산자란 무엇인가?

: 객체 내에 특정 프로퍼티가 존재하는지 여부를 확인하기 위한 연산자
: 프로퍼티 키 in 객체와 같은 방식으로 사용할 수 있음
: 객체 고유의 프로퍼티뿐 아니라 객체의 프로토타입 체인 상에 있는 모든 프로퍼티를 확인하여 불리언 값을 반환함

  • Reflect.has는 무엇인가?

: ES6에 추가된 in 연산자의 대체재로 in 연산자와 동일하게 동작
: Reflect.has(객체, 프로퍼티 키)와 같은 방식으로 사용할 수 있음

  • Object.prototype.hasOwnProperty란 무엇인가?

: 객체 내에 특정 프로퍼티가 존재하는지 여부를 확인하는 메서드
: 객체 고유의 프로퍼티인 경우에만 true를 반환함
: 상속 받은 프로퍼티인 경우에는 false를 반환함

  • 프로퍼티를 열거하는 방법에는 무엇이 있는가?

: for in 문, Object.keys/values/entries 메서드

  • for in 문이란 무엇인가?

: 객체의 모든 프로퍼티를 순회하며 열거할 때 사용하는 문
: for (변수 선언문 in 객체) { ... }와 같은 방식으로 사용할 수 있음
: 객체의 프로퍼티 개수만큼 순회, 변수 선언문에 프로퍼티의 키를 할당함
: 순회 대상 객체의 프로퍼티뿐 아니라 객체가 상속 받은 프로토타입의 프로퍼티까지 열거함, 그러나 열거되지 않는 프로퍼티도 있음
: 객체 자신의 프로퍼티만 열거하려면 우선 Object.prototype.hasOwnProperty로 확인 필요

  • for in 문 사용 시 열거되지 않는 프로퍼티는 무엇인가?

: 프로퍼티 어트리뷰트 중 내부 슬롯 [[Enumerable]]의 값이 false인 경우 열거할 수 없음
: 프로퍼티 키가 Symbol 인 경우에도 열거하지 않음

  • 배열을 순회할 때 for in 문을 사용하는 것이 바람직한가?

: 배열을 순회할 때는 for문, for of문, 배열 프로토타입 메서드 forEach 사용을 권장
: for in문은 배열 요소뿐만 아니라 프로퍼티까지 같이 반환하기 때문

  • Object.keys/values/entries의 특징은 무엇인가?

: 객체 자신의 고유 프로퍼티만 열거하는 메서드

  • Object.keys란 무엇인가?

: 객체 자신의 열거 가능한 프로퍼티 키를 배열로 반환하는 메서드

  • Object.values란 무엇인가?

: 객체 자신의 열거 가능한 프로퍼티 값을 배열로 반환하는 메서드

  • Object.entries란 무엇인가?

: 객체 자신의 열거 가능한 프로퍼티 키와 값의 쌍을 배열로 반환하는 메서드

profile
𝙸'𝚖 𝚊 𝚍𝚎𝚟𝚎𝚕𝚘𝚙𝚎𝚛 𝚝𝚛𝚢𝚒𝚗𝚐 𝚝𝚘 𝚜𝚝𝚞𝚍𝚢 𝚊𝚕𝚠𝚊𝚢𝚜. 🤔

0개의 댓글