JavaScript Type
JavaScript는 동적으로 변하는 언어이기 때문에, 타입도 동적으로 변함
typeof
연산자typeof '문자열' // 'string'
typeof true // 'boolean'
typeof undefined // 'undefined'
typeof 123 // 'number'
typeof Symbol() // 'symbol'
typeof
연산자만으로 모든 타입을 검사할 수 없음
reference type은 typeof 연산자만으로 판단하기 어려움
function myFunction(){}
class MyClass {}
const str = new String('문자열'); // wrapper 객체로 갑싸져 있는 경우
typeof myFunction // 'function'
typeof MyClass // 'function'
typeof str // 'object'
null
의 경우typeof null // 'object'
instanceof
연산자function Person(name, age) {
this.name = name;
this.age = age;
}
const p = {
name: 'poco',
age: 99
}
const poco = new Person('poco', 99);
poco instanceof Person // true
p instanceof Person // false
instanceof
연산자를 사용해서 타입을 검사할 수 있음const arr = [];
const func = function() {};
const date = new Date();
arr instanceof Array // true
func instanceof Function // true
date instanceof Date // true
instanceof Object
를 하면 항상 true가 나옴arr instanceof Obect // true
func instanceof Obect // true
date instanceof Obect // true
Object.prototype.toString.call()
을 사용하여 반환한 문자열을 통해 타입을 검사할 수 있음Object.prototype.toString.call(arr); // '[Object Array]'
Object.prototype.toString.call(func); // '[Object Function]'
Object.prototype.toString.call(date); // '[Object Date]'
null
null
은 불리언 연산에서 falsy
로 취급함
!null // true
!!null // false
null === false // false
!null === true // true
null
은 수학적 연산에서는 0
으로 취급함null + 123 // 123
undefined
let varb;
typeof varb // 'undefined'
undefined
는 불리언 연산에서 falsy
로 취급함!undefined // true
!!undefined // false
undefined
는 수학적 연산을 하면 NaN
이 나옴undefined + 10 // NaN
undefined
와 null
을 equality 연산자로 비교하면 다음과 같음// equality operator(동등 연산자)
undefined == null // true
// strict equality operator(엄격한 동등 연산자)
undefined === null // false
// undefined, null 모두 boolean으로 변환하면 falsy 값
!undefined === !null // true
'1' == 1 // true
1 == true // true
strict equality operator
eqeq 줄이는 방법
// equality operator : 암묵적인 형변환 후 비교
'1' == 1 // true
1 == true // true
0 == false // true
// 암묵적인 형변환
11 + ' 문자와 결합' // '11 문자와 결합'
!!'문자열' // true
!!'' // false
String(11 + ' 문자와 결합') // '11 문자와 결합'
Boolean('문자열') // true
Boolean('') // false
Number('11') // 11
parseInt('9,9999', 10); // 9
isNaN
typeof 123 === 'number' // true
// isNaN(123)은 typeof 123 !== 'number'과 같음
isNaN(123) // false
isNaN
과 Number.isNaN
isNaN
: 느슨한 검사Number.isNaN
: 엄격한 검사isNaN(123 + '테스트') // true
Number.isNaN(123 + '테스트') // false
isNaN
보다 Number.isNaN
으로 검사하기