new String과 String
기본형의 형태를 알아보는 연산자 : typeof
객체에 대해 어떤 객체인지 확인하는 연산자 : instanceof
instanceof연산자는 typeof와는 달리 이항 연산자로 인자를 2개 받으며, 왼쪽에 받는 인자가 오른쪽에 받는 인자의 인스턴스인지 확인하고, 결과로 true 또는 false를 반환한다.
즉, 변수가 해당 클래스의 인스턴스인지 확인한느 키워드이다.
new를 통한 객체 생성
<script>
function Person(name, blog) {
this.name = name;
this.blog = blog;
}
var unikys = new Person("unikys", "https://shiro21.tistory.com");
console.log(unikys instanceof Person); // true
console.log(typeof unikys); // object
</script>
instanceof의 연산결과로 unikys객체가 생성자인 Person을 통해서 생성되었고, Person은 object를 확장하고 있다는 것을 확인할 수 있다.
그리고 typeof의 결과로는 object를 반환한다는 것을 확인할 수 있다.
이렇게 두 연산자의 동작은 유사해 보이지만 차이가 있다.
instanceof연산자는 기본형에 대해 동작하지 않는다는 점이다.
기본적인 instanceof 결과
<script>
console.log(true instanceof Boolean); // false
console.log(true instanceof Object); // false
console.log([0, 1] instanceof Array); // true
console.log({name:"shiro"} instanceof Object); // true
var color1 = new String("red");
var color2 = "red";
console.log(color1 == color2); // true
console.log(color1 instanceof String); // true
console.log(color2 instanceof String); // false
console.log(color2 instanceof Object); // false
console.log(color1 === color2); // false
console.log(color1.constructor === String); // true
console.log(color2.constructor === String); // true
</script>
true or false같은 값은 기본형이기 때문에 Boolean객체의 instanceof가 false로 나타난다.
하지만 [ ]처럼 배열을 생성하는 표현식은 내부적으로 new Array()와 같은 동작을 하게 되므로 instanceof Array가 true이다.
String관련 객체와 기본형을 봤을때 ==로 비교하면 true이다.
그런데 new String()으로 생성한 문자열은 instanceof String이 true지만, 그냥 큰따옴표로 생성한 문자열은 false다. 이것으로 문자열이 같은지 ==연산자로 비교하면 true로 서로 같은 값이라는 결과가 나오지만, 내부적으로 보면 서로 다르다는 것을 알 수 있다.
그래서 ===연산자로 비교를 하면 false를 반환한다.
==연산자는 두 피연산자가 다른 형태일 때 대부분 비교를 위해 형변환이 일어나서 같은 값으로 판단하지만, ===연산자는 형변환이 일어나지 않는 엄격한 비교를 수행하여 다른 값으로 판단하기 때문이다.
따라서, color1은 String의 인스턴스이고, color2는 기본형이므로 서로가 다르다는 결과를 알 수 있다.
'JavaScript | TypeScript > Javascript 시작하기' 카테고리의 다른 글
| [ Javascript ] 글로벌 변수 정의하기 (0) | 2022.04.20 |
|---|---|
| [ Javascript ] 글로벌 변수 (0) | 2022.04.18 |
| [ Javascript ] 자바스크립트의 변수 (0) | 2022.04.13 |
| [ Javascript ] 클로저의 실제 활용 예 (1) | 2022.04.12 |
| [ Javascript ] 클로저 이해하기 (1) | 2022.04.08 |

