一,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)
複製程式碼