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ù)類型
第四節(jié)檢測數(shù)據(jù)類型4種方式
最后編輯于 :
?著作權(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ù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。