안심하세요 머리는 안터집니다.
바야흐로 어그로의 시대 아니겠습니까 ㅎ
지난 포스팅에서 언급했듯이,
instanceof 는 >, <, == 와 같이 앞뒤에 인자를 받아 true / false를 반환해주는 비교연산자이다.
A instanceof B 의 의미는,
"A 가 B의 자식이니 ?" = "A는 B의 프로토타입 체인 하위에 속해있니?"
예시코드 :
var Person = function () { this.age = 5 } ;
var Annie = new Person() ;
Annie instanceof Person ; // true
Annie instanceof Object ; // true
돌발퀴즈 :
// Q1
[1, 2] instanceof Array ;
{ a: "aa" } instanceof Object ;
// 출력 결과는 ?
//Q2
true instanceof Boolean ;
"A" instanceof String ;
// 출력 결과는 ?
//Q3
var str = new String("def") ;
var str2 = "abc" ;
str instanceof String ;
str2 instanceof String ;
// 출력 결과는 ?
정답공개 :
Q1 정답 [ true, true ]
Q2 정답 [ false, false ]
Q3 정답 [ true, false ]
얼마나 맞췄나요? ㅎㅎ
이제 해설을 해보겠다.
Q1 [], {} 는 new Array, new Object 와 똑같다
이 두가지만 예외인듯하다. 정확히 똑같은 의미를 가진다.
[ 1, 2 ] 는 new Array(1, 2) 와 똑같기 때문에 instanceof 실행시 true를 반환한다.
{ a: "aa" } 도 마찬가지.
Q2 상상도 못한 primitive type 의 존재
"A" 는 String 객체의 하위에 속해있지 않다.
true나 false도 Boolean 객체 하위에 속해있지 않다.
사실 잘 생각해보면 이해할 수 있다.
모든 숫자 1, 123, 1425 가 전부 객체일 수도 없고,
이 객체들이 Int(라는 객체는 없지만) 하위 객체로 속할 수도 없다.
이 값들은 그냥 Primitive type (기본타입) 의 한 값일 뿐이다.
한가지 반전이 더 있는데,
String, Boolean은 함수객체이다.
Q3 "??? : 우리가 경우란 경우는 다 어기고 살지만은... 너하고 난 경우 따져야지!"
겉으론 같아 보이지만, 이 둘은 경우 따져야 한다.
"A" 는 객체가 아니지만,
new String("A") 는 객체로 선언한 것이 된다.
놀랍지 않은가 ㄷㄷㄷㄷ
참고로 하나 더,
자바스크립트는 char 형은 없다.
모두가 문자열이다.
마지막으로 정리하자면,
instanceof 는 prototype chain 하위에 속해있는지 확인해 true / false 값을 반환해주는 비교연산자이며,
[], {} 이 두 케이스는 new Array, new Object 와 정확히 같은 의미라,
각각 Array, Object의 instance가 맞다.
이 둘을 제외한 String, Boolean 등 직접 선언된 값들은 객체가 아니라,
primitive type 값이다.
따라서 어떤 것의 instance도 될 수 없다.
참고자료 : unikys.tistory.com/260
'개발 > javascript' 카테고리의 다른 글
React Array Toggle Element (리액트 배열 값 토글하기!) (0) | 2021.07.16 |
---|---|
React useState() Object 내부 값 변경 (0) | 2021.07.05 |
[Javascript] instance of, arguments, callee, this, new (0) | 2020.12.16 |
자바스크립트만의 특징 몇가지 (ft. 호이스팅) + 예시 퀴즈 (0) | 2020.12.07 |
꼭 알아야 할 자바스크립트 성능 최적화를 위한 몇가지 꿀팁 (0) | 2020.12.03 |