數據類型分類
JS數據類型共有6種:5種基本數據類型+引用數據類型;
5種基本數據類型:undefined,string,boolean,null,number(便於記憶縮寫爲USB+2N);
引用數據類型object:Function,Array,Date,RegExp…
基本數據類型 | 引用數據類型 |
---|---|
值不可變 | 值可變 |
比較的是值的比較 | 比較的是引用的比較 |
變量存儲在棧中 | 同時保存在棧內存和堆內存中的對象 |
簡單賦值 互不影響 | 對象引用 相互影響 |
typeOf判斷法
typeof返回值是一個表示數據類型的字符串,它可以用來判斷基本數據類型,不能判斷引用數據類型
- null,object,Array 返回值爲Oject
- Function返回值爲function
- String返回值爲string
- number返回值爲number
- boolean返回值爲boolean
- undefined返回值爲undefined
instanceOf判斷法
instanceOf返回值是true/false。它檢測的是原型,主要作用是判斷一個實例是否屬於某種類型。一般可以檢測引用數據類型(不可以判斷null和undefiend);
例如
A instanceOf B
Array instanceOf Array //返回值爲true;
instanceOf原理
主要實現原理:右邊變量的prototype在左邊變量的原型鏈上即可;因此instanceOf在查找的過程中會便歷左邊變量的原型鏈,直到找到右邊變量的prototype,如果查找失敗則返回false
function instanceOf(leftValue,rightValue){
//prototype是構造函數特有的屬性
let rigthProto = rightValue.prototype;
//JS中的對象都有一個_proto_屬性,這個是對象的隱式原型,指向該對象的父對象的原型prototype
leftValue = leftValue._proto_;
while(true){
if(leftValue === null){
return false;
}
if(leftValue ==== rigthProto){
return true;
}
leftValue = leftValue._proto_;
}
}
判斷是否爲null
//全等號判斷法
var variable = null;
if(variable === null){
//爲null
}
//排除判斷法
if(!variable && typeOf variable != "undefiend" && variable != 0 ){
//爲null
}
object.prototype.toString判斷法
object.prototype.toString返回值是其調用者的具體類型,
例如
console.log(Object.prototype.toString.call(“jerry”));//[object String]
console.log(Object.prototype.toString.call(12));//[object Number]
console.log(Object.prototype.toString.call(true));//[object Boolean]
console.log(Object.prototype.toString.call(undefined));//[object Undefined]
console.log(Object.prototype.toString.call(null));//[object Null]
console.log(Object.prototype.toString.call({name: “jerry”}));//[object Object]
console.log(Object.prototype.toString.call(function(){}));//[object Function]
console.log(Object.prototype.toString.call([]));//[object Array]
console.log(Object.prototype.toString.call(new Date));//[object Date]
console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
注:用call來強制執行Object的toString方法