本文系统梳理JavaScript的六大数据类型,深入解析typeof、instanceof、constructor及Object.prototype.toString.call等数组判断方法的原理与适用场景,帮助开发者准确识别数据类型,避免常见陷阱。
前言部分:
在近期的面试中,我遇到了一道看似基础却未能准确作答的题目。这或许是因为当时过于紧张,导致表现不佳,事后回想起来深感懊恼。为了加深记忆并避免类似错误,我决定对此进行详细记录与总结。技术之路漫长,仍需持续努力与积累。
JS六大数据类型概述
1. JS的六大数据类型
number:表示数值类型,包括整数和浮点数等。
string:字符串类型,通常由单引号或双引号包裹表示。
Boolean:布尔类型,返回true或false,这两个值并不一定直接对应数字1和0。
object:对象类型,可以通过执行new操作符后跟要创建的对象类型名称来实例化。
null:仅有一个值的数据类型。从逻辑上讲,null值表示一个空对象指针。
undefined:未定义类型。当使用var声明变量但未对其进行初始化时,该变量的默认值为undefined。
typeof运算符判断类型
2. 利用typeof进行数据类型判断
typeof运算符可以解决大部分数据类型的判断需求,其返回值是一个字符串,用于说明运算数的类型。
//判断变量num是不是一个数字类型
if(typeof num=='number') {
return true;
}
返回结果如下:
var a="hling"; console.log(a); //string
var a=1; console.log(a); //number
var a=false; console.log(a); //boolean
var a; console.log(typeof a); //undfined
var a = null; console.log(typeof a); //object
var a = document; console.log(typeof a); //object
var a = []; console.log(a); //object
var a = function(){}; console.log(typeof a)
//function除了可以判断数据类型还可以判断function类型
需要注意的是,除了string、number、boolean和undefined这四种类型外,null、object和array使用typeof判断时,返回的结果均为object类型。
对于函数类型,typeof返回的是function,例如typeof(Date)或typeof(eval)等。
数组类型判断方法
3. JS中判断数组类型的方法
1) 使用instanceof运算符
instanceof用于判断一个变量是否属于某个对象的实例,它本质上是一个三目运算表达式。该操作符与JavaScript的面向对象机制密切相关,理解它需要先了解JavaScript中的面向对象概念。因为该操作符是检测对象的原型链是否指向构造函数的prototype对象的。
a instanceof b?alert("true"):alert("false")
//注意b值是你想要判断的那种数据类型,是不是一个字符串,比如Array
示例代码:
var arr = [1,2,3,1];
alert(arr instanceof Array); // true
2) 使用constructor属性
根据W3C定义,constructor属性返回对创建此对象的数组函数的引用。
var arr = [];
arr instanceof Array; // true
arr.constructor == Array; //true
判断各种类型的方法如下:
console.log("string".constructor == String);
console.log((123).constructor == Number);
console.log(false.constructor == Boolean);
console.log([].constructor == Array);
console.log({}.constructor == Object);
通用的判断方法示例:
function isArray(object){
return object && typeof object==='object' &&
Array == object.constructor;
}
3) 特性判断
可以使用Object.isArray()来判断,其目的是准确检测一个值是否为数组。该方法在IE9+、Firefox 4+、Safari 5+、Opera 10.5+和Chrome中均已实现,但在IE8之前的版本中不支持。
function isArray(object){
return object && typeof object==='object' &&
typeof object.length==='number' &&
typeof object.splice==='function' &&
//判断length属性是否是可枚举的 对于数组 将得到false
!(object.propertyIsEnumerable('length'));
}
4) 使用Object.prototype.toString.call
Object.prototype.toString.call(value) == '[object Array]'
以上关于JavaScript数据类型判断与数组检测方法的分享到此结束,希望能为大家提供参考,也希望大家多多支持本站。