一,js的数据类型
数据类型分为两种
- 基本数据类型:以值类型存储在栈内存里
- 复杂数据类型:以引用地址存储在栈内存里,实际值存在堆内存里;
基本数据类型
包括:number;string;boolean;undefined;null;symbol(ES6新增类型)
复杂数据类型
包括:object;array;function;map(ES6新增类型);set(ES6新增类型)
二,当只判断基本数据时
- 只需要:typeof 简单类型 ==> 得到你判断当类型
- 注意: typeof null === 'object'
- 注意: typeof Function === 'function'
三,当只判断复杂数据类型时
- 可用instanceof。但是不可靠
- 对象 instanceof 构造函数 ==> 判断构造函数的protoytpe属性所指的对象 是否在对象的原型链上;
eg1:
function Person(){}
var p = new Person();
p instanceof Person // true
eg2:
p instanceof Object // true
eg3:
[1,2] instanceof Object // true
eg4:
[1,2] instanceof Array // true
Array.isArray([]) // true 只判断为数组时可用
- 由上可知。用instanceof判断也不准确
四,大招:准确判断所有类型
// 利用call的第一个参数可以转换为他的原始构造函数类型的原理
var ele;
Object.prototype.toString.call(ele).slice(8, -1)