JavaScrit的变量:如何检测变量类型

特别声明:小站对部分原创文章已开启付费阅读,并开通年费VIP通道,年费价格为 ¥365.00元。如果您喜欢小站的内容,可以点击开通会员进行全站阅读。如果您对付费阅读有任何建议或想法,欢迎发送邮件至: airenliao@gmail.com!(^_^)

在《变量值的数据类型》一文中,了解到了JavaScript的变量主要有基本类型(undefinednullbooleannumberstring, ES6中还新增了Symbol)和引用类型(对象、数组、函数)。但在JavaScript中用户定义的类型(object)并没有类的声明,因此继承关系只能通过构造函数和原型链接来检查。而在这篇文章中,主要整理了在JavaScript中如何检测一个变量的类型。

在JavaScript中常见的类型检查手段主要有:typeofinstanceofconstructortoString几种。接下来主要看看这几种类型检查手段的使用与区别之处。

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浏览器运行结果如下图所示:

typeof

前面的表格中有一项也显示了,在JavaScript中,使用typeof做类型检测,其返回的都说是一个object,比如:

typeof ["w3cplus","大漠"];
typeof new Date();
typeof new String("w3cplus");
typeof new function (){};
typeof /test/i;

上面的代码在Chrome浏览器的调试工具中返回的都是object

typeof

另外对于Nulltypeof检测返回的值也是一个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
剩余80%内容付费后可查看

如需转载,烦请注明出处:https://www.w3cplus.com/javascript/comparing-type-checks-in-JavaScript.html

如果文章中有不对之处,烦请各位大神拍正。如果你觉得这篇文章对你有所帮助,打个赏,让我有更大的动力去创作。(^_^)。看完了?还不过瘾?点击向作者提问!

赏杯咖啡,鼓励他创作更多优质内容!
返回顶部