Есть ли лучший способ получить тип переменной в JS, чем typeof
? Он отлично работает, когда вы делаете:
> typeof 1
"number"
> typeof "hello"
"string"
Но это бесполезно, когда вы пытаетесь:
> typeof [1,2]
"object"
>r = new RegExp(/./)
/./
> typeof r
"function"
Я знаю instanceof
, но для этого вам нужно знать тип заранее.
> [1,2] instanceof Array
true
> r instanceof RegExp
true
Есть ли способ лучше?
Я предполагаю, что наиболее универсальное решение здесь - состоит в том, чтобы проверить на undefined
и null
первый, затем просто звонить constructor.name.toString()
.
const getType = v =>
v === undefined
? 'undefined'
: v === null
? 'null'
: v.constructor.name.toLowerCase();
console.log(getType(undefined)); // 'undefined'
console.log(getType(null)); // 'null'
console.log(getType('')); // 'string'
console.log(getType([])); // 'array'
console.log(getType({})); // 'object'
console.log(getType(new Set())); // `set'
console.log(getType(Promise.resolve())); // `promise'
console.log(getType(new Map())); // `map'