728x90
1. == 와 ===
요약
== Double Equal 동등연산자: 느슨한 평등
- Value가 동일하면 true
- 유형 강제변환(암묵적 형변환 implicit type coercion)을 수행한다.
=== Triple Equal 일치연산자: 엄격한 평등(strict equality operator)
- Value와 Type이 모두 동일해야만 true
- 암묵적형변환(implicit type coercion)을 발생시키지 않는다.
2. Falsy
- JS는 0 을 false(bool)로 변환한다.
- Falsy values
- false- 부 울린 거짓
- 0 - 숫자 0
- “” - 빈 문자열
- null
- undefined
- NaN - 숫자가 아님
- Falsy value comparison 규칙 (==)
- false, 0 , ""
- 셋은 서로 동등하다.
- null, undefined
- 서로 동등하다.
- NaN
- 무엇이든 동등하지 않다.
- false, 0 , ""
Triple Equals는 double equals보다 우수합니다.
가능할 때마다 평등을 테스트하기 위해 Triple Equals를 사용해야 합니다.
type과 value를 테스트함으로써 항상 진정한 평등성 테스트를 수행하고 있음을 확신 할 수 있습니다.
3. typeof 와 instanceof
둘 다 type check할 때 사용
typeof
- Primitive type 구별에만 사용한다. (Symbol도 가능!)
- Array, Null, 날짜, RegExp, 사용자 정의 객체, DOM 요소 등등에 Object를 반환한다.
- typeof(null)은 null을 반환해야 하지만, object를 반환한다.
- typeof(sth) or typeof sth 둘 다 사용가능
instanceof
- 객체가 특정 타입(생성자,constructor)의 인스턴스 여부를 알려준다.
- 예를 들어 Array가 new Array로 새 배열을 생성하는 것처럼 constructor이기 때문
- Null과 undefined를 제외하면 Primitive type에는 작동하지 않는다.
- 단, 생성자 속성을 확인하면 number, boolean , string에도 작동한다.
(3).constructor === Number // true true.constructor === Boolean // true 'abc'.constructor === String // true // 원시 값의 속성을 참조할 때마다 자바스크립트가 // 다음과 같이 객체 래퍼로 자동으로 값을 감싸기 때문이다. var wrapper = new Number(3)
- 생성자 점검의 문제
- prototype 체인을 확인하지 않는다.
function Cat(){} Cat.prototype = new Animal() Cat.prototype.constructor = Cat var felix = new Cat() felix instanceof Cat // true felix instanceof Animal // true felix.constructor === Cat // true felix.constructor === Animal // false
- 객체가 null이거나 undefined인 경우 심각한 문제를 발생한다.
felix = null felix instanceof Animal // true felix.constructor === Animal // throws TypeError
728x90
'Programming Language' 카테고리의 다른 글
JS33 - 07.표현식과 구문(expression vs statement) (0) | 2021.05.31 |
---|---|
JS33 - 06.함수 범위, 블록 범위, 렉시컬(lexical) 범위 (0) | 2021.05.31 |
JS33 - 04.암묵적 형변환(Implicit coercion) (0) | 2021.05.31 |
JS33 - 03.값과 참조(Value and Reference) (0) | 2021.05.31 |
JS33 - 02.원시타입(Primitive Types) (0) | 2021.05.31 |
댓글