特别声明:如果您喜欢小站的内容,可以点击申请会员进行全站阅读。如果您对付费阅读有任何建议或想法,欢迎发送邮件至: airenliao@gmail.com!或添加QQ:874472854(^_^)
在《变量值的数据类型》一文中,了解到了JavaScript的变量主要有基本类型(undefined
、null
、boolean
、number
和string
, ES6中还新增了Symbol
)和引用类型(对象、数组、函数)。但在JavaScript中用户定义的类型(object
)并没有类的声明,因此继承关系只能通过构造函数和原型链接来检查。而在这篇文章中,主要整理了在JavaScript中如何检测一个变量的类型。
在JavaScript中常见的类型检查手段主要有:typeof
、instanceof
、constructor
和toString
几种。接下来主要看看这几种类型检查手段的使用与区别之处。
typeof
typeof
操作符返回的是类型字符串,它的返回值有以下几种取值:
类型 | 结构 |
---|---|
Undefined | "undefined" |
布尔值 | "boolean" |
数值 | "number" |
字符串 | "string" |
Symbol | "symbol" |
Null | "object" |
宿主对象(JS环境提供的,比如浏览器) | Implementation-dependent |
函数对象 | "function" |
任何其他对象 | "object" |
来看看代码:
typeof 37; // => "number"
typeof "w3cplus"; // => "string"
typeof true; // => "boolean"
typeof Symbol(); // => "symbol"
typeof undefined; // => "undefined"
typeof {}; // => "object"
typeof function (){};// => "function"
Chrome浏览器运行结果如下图所示:
前面的表格中有一项也显示了,在JavaScript中,使用typeof
做类型检测,其返回的都说是一个object
,比如:
typeof ["w3cplus","大漠"];
typeof new Date();
typeof new String("w3cplus");
typeof new function (){};
typeof /test/i;
上面的代码在Chrome浏览器的调试工具中返回的都是object
:
另外对于Null
,typeof
检测返回的值也是一个object
:
typeof null; // => "object"
据说这是typeof
的一个知名Bug。先忽略其是不是typeof
的bug,在JavaScript中,null
也是基本数据类型之一,它的类型显然是Null
。其实这也反映了null
的语义,它是一个空指针表示对象为空,而undefined
才表示什么都没有。
根据上面的内容,简单的对typeof
做一个归纳:
typeof
只能检测基本数据类型,对于null
还有一个Bug。
然而在实际写代码的时候,使用typeof
时需要养成一个好的习惯。比如,使用typeof
一个较好的习惯是写一个多种状态的函数:
function f (x) {
if (typeof x == "function") {
... // 当x是一个函数时,做些什么...
} else {
... // 其它状态
}
}
这样使用较为合理,但不建议像下面这样使用typeof
:
// 检测是否存在全局变量jQuery
if (typeof(jQuery) !== 'undefined') ...
话峰再回转一下,前面使用typeof
对一个数组做检测的时候也返回object
。特别是下面的代码,更易让人迷惑:
typeof new Boolean(true) === 'object';
typeof new Number
如需转载,烦请注明出处:https://www.w3cplus.com/javascript/comparing-type-checks-in-JavaScript.html
如果文章中有不对之处,烦请各位大神拍正。如果你觉得这篇文章对你有所帮助,打个赏,让我有更大的动力去创作。(^_^)。看完了?还不过瘾?点击向作者提问!