javascript深入理解系列文章網(wǎng)址
http://www.itdecent.cn/p/451eed9094f5
1.typeof(能判斷6種類型)
typeof其實(shí)就是判斷參數(shù)是什么類型的實(shí)例,就一個(gè)參數(shù)
typeof 一般只能返回如下幾個(gè)結(jié)果(一共六個(gè)):
"number"、"string"、"boolean"、"object"、"function" 和 "undefined"。(這些值都是小寫)
(溫馨提示:此處要和js的數(shù)據(jù)類型區(qū)別開)
js的簡(jiǎn)單數(shù)據(jù)類型:string,number,boolean,null,undefined
js的復(fù)雜數(shù)據(jù)類型:object
運(yùn)算數(shù)為數(shù)字 typeof(x) = "number"
字符串 typeof(x) = "string"
布爾值 typeof(x) = "boolean"
特別注意對(duì)象,數(shù)組和null typeof(x) = "object"(因?yàn)閚ull和數(shù)組都屬于對(duì)象)
函數(shù) typeof(x) = "function"
2.instanceof
要知道使用typeof判斷array,null都會(huì)返回"object",所以這個(gè)時(shí)候可以使用instanceof判斷
instanceof 運(yùn)算符用來測(cè)試一個(gè)對(duì)象在其原型鏈中是否存在一個(gè)構(gòu)造函數(shù)的 prototype 屬性。(直白點(diǎn)說就是判斷左邊的值是否是右邊對(duì)象的實(shí)例)
例如:var a=[1,2];
a instanceof Array則為true
因?yàn)閏onsole.log(a.__proto__===Array.prototype);為true所以上面為true
其實(shí)也就是判定a是Array的實(shí)例
3.Object.prototype.toString.call(value)(至少14中類型)
1.判斷基本類型:(輸出的值是字符串,并且用中括號(hào)括起來,左邊是object(小寫),右邊是類型(首字母大寫))
Object.prototype.toString.call(null);//”[object Null]”
Object.prototype.toString.call(undefined);//”[object Undefined]”
Object.prototype.toString.call(“abc”);//”[object String]”
Object.prototype.toString.call(123);//”[object Number]”
Object.prototype.toString.call(true);//”[object Boolean]”
2.判斷原生引用類型:
函數(shù)類型
Function fn(){console.log(“test”);}
Object.prototype.toString.call(fn);//”[object Function]”
日期類型
var date = new Date();
Object.prototype.toString.call(date);//”[object Date]”
數(shù)組類型
var arr = [1,2,3];
Object.prototype.toString.call(arr);//”[object Array]”
正則表達(dá)式
var reg = /[hbc]at/gi;
Object.prototype.toString.call(arr);//”[object Array]”
自定義類型
function Person(name, age) {
this.name = name;
this.age = age;
}
var person = new Person("Rose", 18);
Object.prototype.toString.call(arr); //”[object Object]”
**很明顯這種方法不能準(zhǔn)確判斷person是Person類的實(shí)例,而只能用instanceof 操作符來進(jìn)行判斷,如下所示:
console.log(person instanceof Person);//輸出結(jié)果為true**
3.判斷原生JSON對(duì)象:
var isNativeJSON = window.JSON && Object.prototype.toString.call(JSON);
console.log(isNativeJSON);//輸出結(jié)果為”[object JSON]”說明JSON是原生的,否則不是;
注意:Object.prototype.toString()本身是允許被修改的,而我們目前所討論的關(guān)于Object.prototype.toString()這個(gè)方法的應(yīng)用都是假設(shè)toString()方法未被修改為前提的。
參考:http://www.zhufengpeixun.cn/JavaScriptmianshiti/2014-02-28/271.html