javascript深入理解系列(十)——判斷基本類型的方法typeof、instanceof以及Object.prototype.toString.call(value)

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

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

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

  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,535評(píng)論 0 13
  • Javascript有很多數(shù)組的方法,有的人有W3C的API,還可以去MDN上去找,但是我覺得API上說的不全,M...
    頑皮的雪狐七七閱讀 4,491評(píng)論 0 6
  • JavaScript語(yǔ)言精粹 前言 約定:=> 表示參考相關(guān)文章或書籍; JS是JavaScript的縮寫。 本書...
    微笑的AK47閱讀 654評(píng)論 0 3
  • 我的那條魚,小金魚,從超市門口的花草鋪?zhàn)永镔I的,8塊一條,買了5條。那個(gè)時(shí)候很窮,住在村民樓的小單間,它們就被放...
    蘇向晚閱讀 533評(píng)論 0 0
  • 2018年6月11日 星期一 晴 286篇 “你愛你的孩子嗎?”很簡(jiǎn)單的一句話。99%的人都會(huì)回答“會(huì)!”但...
    我是快樂的老爸閱讀 250評(píng)論 2 1

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