https://inflearn-quiz.vercel.app/javascript/3-types
실전 자바스크립트 퀴즈
문제 1 다음 중 typeof 결과값이 다른 것은? typeof {}typeof nulltypeof []typeof function(){}typeof new Number(1) 문제 2 다음 중 typeof로 정확한 타입을 검출하지 못할 때 사용하면 도움이 되는 것은? Object.prototype.toS
inflearn-quiz.vercel.app
1. 다음 중 typeof 결과값이 다른 것은?
console.log(typeof {}); // object
console.log(typeof null); // object
console.log(typeof []); // object
console.log(typeof function () {}); // function
console.log(typeof new Number(1)); // object
(1) {}는 빈 객체이며 빈 객체는 object 타입이다.
(2) null은 변수에 null을 할당하여 값이 없음을 나타낸다. 자바스크립트의 오류로 object 타입으로 나타난다.
===로 null을 검사 하는 것으로 문제를 해결할 수 있다.
(3) []는 빈 배열이며 배열은 객체의 한 종류로 취급된다.
(4) function() {}은 빈 함수로, 함수의 데이터 타입은 function이다.
(5) new를 사용해서 Number객체를 생성했기 때문에 object 타입이다.
1 또는 Number(1)을 사용하면 number 객체가 된다.
2. 다음 중 typeof로 정확한 타입을 검출하지 못할 때 사용하면 도움이 되는 것은?
1. Object.prototype.toString
2. Object.prototype.valueOf
3. instanceof
(1) Object.prototype.toString - 객체의 클래스를 문자열로 반환.
이를 활용하면, typeof로 구분이 어려운 객체 타입을 정확하게 판별할 수 있다.
Object.prototype.toString.call([]); // [object Array]
Object.prototype.toString.call({}); // [object Object]
Object.prototype.toString.call(function () {}); // [object Function]
Object.prototype.toString.call(null); // [object Null]
Object.prototype.toString.call(undefined); // [object Undefined]
(2) Object.prototype.valueOf - 객체의 원시 값을 반환하는 메서드.
console.log(Object.prototype.valueOf.call(1)); // [Number: 1]
(3) instanceof - 객체가 특정 클래스의 인스턴스인지 확인하는 데 사용한다.
3. 다음 코드에 대한 설명으로 틀린 것은?
const idSymbol = Symbol('id'); // idSymbol이라는 심볼을 생성
const obj = { id: 100 }; // obj라는 객체를 만든 후 id에 100 할당.
obj[idSymbol] = 200; // idSymbol이라는 key를 이용해서 속성에 값 200 할당.
(1) Symbol을 사용하면 속성 이름 충돌 문제를 해결할 수 있다.
-> Symbol을 사용하여 고유한 속성 키를 만들어 충돌을 해결할 수 있다.
(2) 4번 줄에서 100을 200으로 덮어쓰고 있다.
-> obj: { id: 100, idSymbol: 200 } 별개의 값이다.
(3) 자바스크립트에는 Symbol.iterator라는 내장된 심볼이 있다.
-> 자바스크립트는 Symbol.iterator라는 내장 심볼이 있으며 객체가 순회 가능한 구조를 가지고 있는지 여부를 나타낸다.
4. 다음 코드에 대한 설명으로 옳은 것은?
const s1 = Symbol('id');
const s2 = Symbol('id');
const obj = {};
obj[s1] = 1;
obj[s2] = 2;
(1) 6번 줄에서 1을 2로 덮어쓰고 있다.
-> s1과 s2는 별개의 심볼이다.
(2) 같은 이름의 심볼은 만들 수 없으므로 에러가 발생한다.
-> 심볼은 이름이 같아도 고유의 값을 가진다. 따라서 s1과 s2는 다르다.
(3) 심볼 이름이 같아도 인스턴스별로 구분되므로 obj는 두 값을 모두 갖고있다.
-> 심볼 이름이 같아도 s1, s2로 구분되기 때문에 obj는 s1, s2두 값을 모두 갖고 있다.
5. 다음 중에서 false 값을 갖는 변수를 모두 고르세요.
const v1 = !!123; // true
const v2 = !!0; // false
const v3 = !!'abc'; // true
const v4 = !!''; // false
! -> 논리 부정 연산자, boolean이 아니라면 먼저 boolean값으로 변환 한 뒤 연산 수행.
v2, v4가 false이다.
6. 다음 중 옳은 것은?
(1) 등호 3개는 작성하기 번거로우므로 등호 2개를 추천한다. -> x
(2) 등호 3개는 두 값의 타입이 다르면 false가 되므로 등호 2개를 추천한다. -> x
(3) 등호 2개는 두 값의 타입이 다를 때 복잡한 로직을 거치므로 되도록 등호 3개를 추천한다. -> o
== 사용하는 경우: 값의 비교 이전에 암시적 형 변환을 수행해서 문제가 발생할 여지가 있다.
=== 사용하는 경우: 값과 타입 모두 같은 경우 true를 반환한다.
'Programming language > JavaScript' 카테고리의 다른 글
나머지 매개변수, Reduce함수, Referece 할당 (0) | 2023.03.20 |
---|---|
자바스크립트 퀴즈 - number 타입 (0) | 2023.03.20 |
자바스크립트 퀴즈 - let, const (0) | 2023.03.16 |
자바스크립트 퀴즈 - var (0) | 2023.03.16 |
[Node.js] open-graph-scraper모듈 (0) | 2023.02.06 |