获取 Javascript 变量类型的更好方法?

2022-08-30 00:05:50

有没有比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

有没有更好的方法?


答案 1

安格斯·克罗尔(Angus Croll)最近写了一篇关于此事的有趣博客文章-

http://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/

他介绍了各种方法的优缺点,然后定义了一个新方法“toType” -

var toType = function(obj) {
  return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
}

答案 2

您可以尝试使用 .constructor.name

[].constructor.name
new RegExp().constructor.name

与所有JavaScript一样,最终总会有人指出这是邪恶的,所以这里有一个指向答案的链接,可以很好地涵盖这一点。

另一种方法是使用Object.prototype.toString.call

Object.prototype.toString.call([])
Object.prototype.toString.call(/./)