深色模式
判断数据类型
JS中有哪些数据类型
要判断类型,就要列举 JS 中到底有哪些类型。JS类型分类可 基本数据类型 和 对象。
其中基本类型有 7 种,分别是
- Boolean 布尔类型
- null
- undefined 表示变量未定义
- Number 数字类型
- BigInt 任意精度整数
- String 字符串
- Symbol
- 对象 Object
常见的类型如,基本对象, Array, Date, Map, Set, Function 等
基本数据类型判断方法
使用 typeof
js
console.log(typeof 2); // number
console.log(typeof true); // boolean
console.log(typeof 'str'); // string
console.log(typeof undefined); // undefined
console.log(typeof BigInt(2432141241)); // bigint
console.log(typeof Symbol(1)); // symbol
console.log(typeof null); // object
console.log(typeof []); // object
console.log(typeof function () {}); // function
console.log(typeof {}); // object
基本数据类型中 null
是特殊的,因此 typeof 不能确定null
对于对象使用 typeof , function 是特殊的,其他的都是 object
判断对象
使用 instanceof
只适用于对象,而不使用普通数据类型
js
console.log(2 instanceof Number); // false
console.log(true instanceof Boolean); // false
console.log('str' instanceof String); // false
console.log([] instanceof Array); // true
console.log(function () {} instanceof Function); // true
console.log({} instanceof Object); // true
使用 constructor
一个对象数据的 constructor 指向这个对象的构造函数
js
console.log((2).constructor === Number); // true
console.log(true.constructor === Boolean); // true
console.log('str'.constructor === String); // true
console.log([].constructor === Array); // true
console.log(function () {}.constructor === Function); // true
console.log({}.constructor === Object); // true
TIP
constructor
有两个作用,一是判断数据的类型,二是对象实例通过 constrcutor
对象访问它的构造函数。需要注意,如果创建一个对象来改变它的原型,constructor
就不能用来判断数据类型了:
js
function Fn(){};
Fn.prototype = new Array();
var f = new Fn();
console.log(f.constructor===Fn); // false
console.log(f.constructor===Array); // true
使用 Object.prototype.toString.call() 判断
使用此方法效果如下,该方法可以判断基本数据类型和对象类型,是个不错的办法。
js
Object.prototype.toString.call(''); // [object String]
Object.prototype.toString.call(1); // [object Number]
Object.prototype.toString.call(true); // [object Boolean]
Object.prototype.toString.call(Symbol(1)); // [object Symbol]
Object.prototype.toString.call(undefined); // [object Undefined]
Object.prototype.toString.call(null); // [object Null]
Object.prototype.toString.call(new Function()); // [object Function]
Object.prototype.toString.call(new Date()); // [object Date]
Object.prototype.toString.call([]); // [object Array]
Object.prototype.toString.call(new RegExp()); // [object RegExp]
Object.prototype.toString.call(new Error()); // [object Error]
判断类型的代码
js
function getType(target) {
const type = typeof target;
// undefined 类型
if (!type) return type;
// 对象类型或者Null, 此时必须使用 Object.prototype.toString 了
// 格式 [Object Function] [Object Date] 等
if (type === 'object') {
return Object.prototype.toString.call(target).split(' ')[1].split(']')[0].toLowerCase();
}
// 基本数据类型
return type;
}
上面的代码太复杂,简化直接使用 Object.prototype.toString.call
js
function getType(target) {
return Object.prototype.toString.call(target).split(' ')[1].split(']')[0].toLowerCase();
}