JavaScript中判断变量数据类型的正确方法
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]') {
// 肯定是一个数组!
// 这是判断一个变量是否为数组的最可靠方法
}
JS语法错误会阻止加载吗?区分SyntaxError与资源加载失败
2026-11-05 16:08:46
JavaScript常见SyntaxError语法错误排查与修复方法
2026-11-05 13:58:44
JS中slice、substring和substr截取字符串的区别
2026-11-05 13:43:47
JS 转 TS 手动迁移最佳实践:从配置 tsconfig 到消除 any 类型
2026-11-05 11:53:32
为什么JS数组push后得到的是数字而不是数组?
2026-11-05 09:59:18
