JavaScript中判断变量数据类型的正确方法

作者:小括号

时间:2026-10-29

浏览:657

JavaScript包含Number、String、Boolean、Object、Undefined和Null六种类型。虽然typeof是基础检测操作符,但数组和null均返回object。本文介绍利用Object.prototype.toString.call()进行精确类型判断,特别是针对数组的可靠检测方法,解决typeof的歧义问题。

文章目录

JavaScript数据类型与typeof操作符

尽管JavaScript被归类为弱类型语言,它仍定义了六种基本数据类型:Number、String、Boolean、Object、Undefined和Null。其中,Object属于复杂数据类型,由无序的键值对构成;其余五种则属于简单数据类型。需注意的是,类型名称的首字母大写,而具体的变量值首字母通常小写。由于JavaScript不支持自定义类型,所有值必然属于这六种之一。要确定变量的具体类型,应使用typeof操作符。必须明确,typeof是操作符而非方法,因此其字母'o'必须小写。语法格式为typeof temp;(temp为变量)。虽然括号非强制,但为了提升代码可读性,建议加上括号。

JavaScript内置的typeof操作符可用于检测变量类型,但其结果有时令人困惑。例如,使用typeof检测数组时,返回的结果竟然是"Object",这并非预期行为。

下表展示了使用typeof对各种数据类型进行检测的结果:

数组检测的可靠方案


var myFunction = function() {
  console.log('hello');
};

var myObject = {
  foo : 'bar'
};

var myArray = [ 'a', 'b', 'c' ];

var myString = 'hello';

var myNumber = 3;

typeof myFunction;  // 返回 'function'
typeof myObject;   // 返回 'object'
typeof myArray;   // 返回 'object' -- 小心哦!
typeof myString;   // 返回 'string';
typeof myNumber;   // 返回 'number'

typeof null;     // 返回 'object' -- 小心哦!


if (myArray.push && myArray.slice && myArray.join) {
  // 很可能是一个数组
  // 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。
}

if (Object.prototype.toString.call(myArray) === '[object Array]') {
  // 肯定是一个数组!
  // 这是判断一个变量是否为数组的最可靠方法
}

 

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章