第四節(jié)檢測數(shù)據(jù)類型4種方式


1、typeof  用來檢測數(shù)據(jù)類型的運算符
使用typeof檢測數(shù)據(jù)類型,首先返回的都是一個字符串,其次字符串中包含了對應(yīng)的數(shù)據(jù)類型,比如:"number","undefined","string","boolean","function","object"
局限性:type null---->"object"
不能細分是數(shù)組還是正則,還是對象中的其他值,因為使用typeof檢測數(shù)據(jù)類型對于對象數(shù)據(jù)類型,最后返回結(jié)果都是“object”


2、Instanceof  檢測某一個實例是否屬于這個類    
var obj = [];
console.log(obj instanceof Array);
1>局線性:不能用來檢測和處理字面量方式創(chuàng)建出來的基本數(shù)據(jù)類型值
對于基本數(shù)據(jù)類型來說,字面量方式創(chuàng)建出來的結(jié)果和實例方式創(chuàng)建出來的結(jié)果是有一定區(qū)別的,從嚴格意義上來講,只有實例創(chuàng)建出來的對象才是標準的對象數(shù)據(jù)類型值,也是標準的String這個類的實例,對于字面量方式創(chuàng)建出來的結(jié)果是基本數(shù)據(jù)類型值,不是嚴謹?shù)膶嵗?,但是由于js松散特點,導致了可以使用Number.prototype上提供的方法
    console.log("" instanceof String);
    console.log(true instanceof Boolean);
console.log(new String(1) instanceof String);
2>局線性:Instanceof特性:只要在當前原型鏈上,我們用其檢測出來的結(jié)果都是true
    var obj = [];
    console.log(obj instanceof Array);
console.log(obj instanceof  Object);


3、constructor  構(gòu)造函數(shù)  
1、constructor  可以處理基本數(shù)據(jù)類型的檢測
      console.log('ZHAGNSAN'.constructor == String);
  2、作用和instanceof不一樣
    var arr = [];
    console.log(arr.constructor == Array);
    console.log(arr.constructor == Object);
3、局線性:我們可以把類的原型進行重寫,在重寫的過程中很有可能出現(xiàn)把之前的constructor給覆蓋了,這樣檢測出來的結(jié)果就是不準確的
             function Fn() {}
             Fn.prototype = new Array;
             var f = new Fn;
             console.log(f.constructor == Array);  //true
             console.log(f.constructor == Fn);   //false

4、Object.prototype.toString.call()首先獲取Object原型上的toString方法,讓方法執(zhí)行,并且改變方法中的this關(guān)鍵字的指向
     
toString的理解
console.log((1).toString());相當于Number.prototype.toString,Number原型上toString轉(zhuǎn)換為字符串,返回字符串1
console.log((1).__proto__.__proto__.toString());相當于Object.prototype.toString--->"[object Object]"

對于Number,String、Boolean Array RegExp  Date  Function原型上的toString方法都是把當前的數(shù)據(jù)類型轉(zhuǎn)換為字符串類型(僅僅是轉(zhuǎn)換為字符串的)
但是Object的toString()并不是用來轉(zhuǎn)換為字符串的
console.log(({"name":"張三"}).toString())--->"[object Object]"
console.log((Math).toString())----->[object Math]

Object.prototype.toString()的作用是
var obj={"name": "張三"};
console.log(obj.toString());toString中的this是obj,返回obj的所屬類的信息---->"[object Object]" 第一個object代表是當前實例是對象數(shù)據(jù)類型的,第二個Object代表的是obj所屬類是Object

console.log((Math).toString())toString中的this是Math,那么返回的是Math所屬類的信息
var ary=[];
console.log(Object.prototype.toString.call(ary));---->"[object Array]" 說明ary屬于Array類的實例
console.log(Object.prototype.toString.call(null));[object Null]
console.log(Object.prototype.toString.call(true)); [object Boolean]
console.log(Object.prototype.toString.call(1));[object Number]
可以檢測任意數(shù)據(jù)類型




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 2016最重要的事: 大學畢業(yè) 學會了烘焙 做飯菜 學會了騎車 開車能單獨上路 種了很多很多花 有了露臺 和家...
    小小小慶閱讀 149評論 0 0
  • 右手邂逅綽約風姿的背影。 偏偏那是你!讓我遇到一個正好年齡的你,從識到戀。 左手采擷風華正茂的...
    原來是那個女孩閱讀 295評論 1 12
  • 在年輕人眼中,“記賬”這倆字兒和自己的英語單詞書的地位幾乎同等。有時覺得這事挺重要,撿起來背了幾個詞,覺得乏味,又...
    漁蓬閱讀 328評論 0 0

友情鏈接更多精彩內(nèi)容