一、js中的数据类型
1、原始类型:number、string、boolean、undefined、null、symbol、bigint。
2、对象类型:Array、Date、Map、Set、RegExp、Function等。
二、判断数据类型的方法
1、typeof操作符
// 原始类型
console.log(typeof 'gufee'); // string
console.log(typeof 18); // number
console.log(typeof true); // boolean
console.log(typeof undefined); // undefined
console.log(typeof null); // object
console.log(typeof Symbol('symbol')); // symbol
console.log(typeof 1n); // bigint
// 对象类型
console.log(typeof { name: 'gufee' }); // object
console.log(typeof ['hello', 123]); // object
console.log(typeof function () { }); // function
console.log(typeof new Set()); // object
console.log(typeof new Map()); // object
console.log(typeof /^123$/); // object
- typeof操作符返回表示数据类型的字符串。
- 可以用来判断除去null的原始类型以及函数类型的数据,对于null以及除函数外的其他对象类型,始终返回object。
2、instanceof操作符
const func = function () { }
console.log(new String('abc') instanceof String); // true
console.log(new Number(123) instanceof Number); // true
console.log([] instanceof Array); // true
console.log({} instanceof Object); // true
console.log(new Set() instanceof Set); // true
console.log(new Map() instanceof Map); // true
console.log(func instanceof Function); // true
console.log(new Date() instanceof Date); // true
- instanceof操作符返回一个布尔值。
- 使用方法为A instanceof B,其中A必须是对象类型的数据,B为构造函数,该操作符用来判断B的原型对象是否在A的原型链上。
3、Object.prototype.toString方法
console.log(Object.prototype.toString.call('abc')); // [object String]
console.log(Object.prototype.toString.call(123)); // [object Number]
console.log(Object.prototype.toString.call(true)); // [object Boolean]
console.log(Object.prototype.toString.call(1n)); // [object BigInt]
console.log(Object.prototype.toString.call(undefined)); // [object Undefined]
console.log(Object.prototype.toString.call(null)); // [object Null]
console.log(Object.prototype.toString.call(Symbol('h'))); // [object Symbol]
console.log(Object.prototype.toString.call({})); // [object Object]
console.log(Object.prototype.toString.call([])); // [object Array]
console.log(Object.prototype.toString.call(new Set())); // [object Set]
console.log(Object.prototype.toString.call(new Map())); // [object Map]
console.log(Object.prototype.toString.call(new Date())); // [object Date]
console.log(Object.prototype.toString.call(new RegExp(/^123$/))); // [object RegExp]
三、注意事项
- 使用String或者Number构造函数创建出来的数据属于对象类型,不属于原始值类型。
- NaN是number类型。