JavaScript 인터뷰 질문 — 객체

https://www.amazon.com/John-Au-Yeung/e/B08FT5NT62에서 Amazon에서 내 책을 확인하십시오.

지금 http://jauyeung.net/subscribe/에서 내 이메일 목록을 구독하십시오.

프론트엔드 개발자로 일하려면 코딩 인터뷰를 해야 합니다.

이 기사에서는 몇 가지 객체 질문을 살펴보겠습니다.

개체에 특정 속성이 있는지 확인하는 방법은 무엇인가요?



객체에 속성이 있는지 확인하는 몇 가지 방법이 있습니다.

먼저 in 연산자를 사용할 수 있습니다. 예를 들어 다음과 같이 사용할 수 있습니다.

const foo = { a: 1 };
console.log('a' in foo);

in 연산자는 주어진 이름의 속성이 개체 자체에 있는지 또는 프로토타입 체인의 프로토타입에 있는지 확인합니다.
truea의 속성이므로 위의 코드는 foo를 반환해야 합니다.
console.log(‘toString’ in foo);truetoString에서 상속되는 Object의 프로토타입에 있으므로 foo도 기록해야 합니다.
Object.prototype.hasOwnProperty 메서드를 사용할 수도 있습니다. 예를 들어 다음과 같이 사용할 수 있습니다.

const foo = { a: 1 };
console.log(foo.hasOwnProperty('a'));


위의 코드는 hasOwnProperty의 프로토타입에 있는 foo 메소드를 사용하여 afoo에 존재하는지 여부와 자체 속성을 확인합니다. 즉, 프로토타입이 아닌 foo 자체에 있다는 의미입니다.
console.log 이후 true 로그afoo 본인 소유입니다.

마지막으로 다음과 같이 대괄호 표기법을 사용하여 확인할 수 있습니다.

const foo = {
  a: 1
};
console.log(foo['a']);

undefined 이외의 값을 반환하면 속성으로 추가한 것입니다.

이 예의 경우이므로 true  를 반환해야 합니다.

Object.seal과 Object.freeze 메소드의 차이점은 무엇입니까?



개체에서 Object.seal를 호출한 후 속성이 개체에 추가되는 것을 중지합니다.

또한 기존의 모든 속성을 구성 불가능하게 만듭니다. 즉, 속성 설명자가 변경되지 않습니다.

또한 기존 속성은 개체에서 호출된 후 delete 연산자로 제거할 수 없습니다.

객체의 프로토타입인 객체의 __proto__ 속성도 봉인되어 있습니다.

예를 들어 다음이 있는 경우:

const foo = {
  a: 1
};
Object.seal(foo);
delete foo.a


마지막 줄을 실행한 후에도 여전히 foo.a를 볼 수 있습니다.

엄격 모드에 있으면 오류가 발생합니다.
Object.freeze 개체를 변경할 수 없게 만듭니다. 기존 속성은 각 속성의 값을 포함하여 어떤 식으로든 변경할 수 없습니다.

또한 Object.seal가 수행하는 모든 작업을 수행합니다.

in 연산자와 객체의 hasOwnProperty 메소드의 차이점은 무엇인가요?


in 연산자는 속성이 개체 자체에 있고 프로토타입 체인의 프로토타입에 있는지 확인합니다.

반면에 hasOwnProperty는 객체가 프로토타입이 아닌 호출된 객체 내부에 있는지 여부만 확인합니다.

typeof null이 객체를 반환하는 이유는 무엇인가요?


null 유형이 object인데, 이는 JavaScript의 초기 버전에서 작동하는 방식이기 때문입니다. 기존 코드베이스가 깨지는 것을 방지하기 위해 이 방식을 유지합니다.

값이 null인지 확인하는 방법은 무엇입니까?



다음과 같이 null를 확인하려면 완전 항등 연산자를 사용해야 합니다.

foo === null


새 키워드의 기능은 무엇인가요?


new 키워드는 생성자 함수 또는 클래스에서 개체를 만드는 데 사용됩니다.

예를 들어, Person 클래스가 있는 경우:

function Person(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
};


그런 다음 다음과 같이 작성하여 새 인스턴스를 만들 수 있습니다.

const person = new Person("Jane", "Smith");

new는 몇 가지 작업을 수행합니다.
  • 빈 객체를 생성한다
  • 빈 개체를 this
  • 에 할당합니다.
  • 함수가 생성자 함수의 prototype 속성에서 상속합니다. 따라서 PersonPerson.prototype에서 상속합니다.
  • 함수에 return 문이 없으면 this  를 반환합니다.

  • ES2015 또는 이후 버전의 클래스 구문은 생성자 함수에 대한 구문 설탕일 뿐입니다. 동일한 작업을 수행하지만 클래스처럼 보입니다.

    결론


    in 연산자, hasOwnProperty   또는 대괄호 표기법을 사용하여 객체에 속성이 있는지 확인할 수 있습니다.
    Object.seal 속성 설명자가 변경되고 속성이 삭제되는 것을 방지합니다.
    Object.freeze는 객체를 불변으로 만듭니다.
    null는 자체 유형이 아니라 object 유형입니다.
    new 키워드는 생성자 함수에서 새 개체를 만들고 반환합니다.

    좋은 웹페이지 즐겨찾기