JS數據類型及判斷方法總結

數據類型分類

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方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章