typeof與instanceof用法小記

JavaScript中typeof instanceof常用老判斷一個變量是否為空,或者是什么類型的。但是他們之間還是有區(qū)別的

1. typeof

typeof是一個一元運算,放在一個運算數(shù)之前,運算數(shù)可以是任意類型
它返回值是一個字符串,該字符串說明運算符的類型
typeof一般只能返回如下幾個結(jié)果:“number”,“string”,“boolean”,“object”,“function”,“undefined”.

    <script type="text/javascript">
        var str = "hhhh";
        var num = 12334;
        var obj = {};
        var fn = function(){
            console.log(11111)
        }
        var arr = [];
        var boolea = false;
        var a = null;
        var b;
        //            string       number      object     function     object      boolean     object   undefined
        console.log(typeof str, typeof(num), typeof obj, typeof fn, typeof arr, typeof boolea, typeof a, typeof b)
    </script>

即我們可以通過typeof判斷一個變量是否存在。例如

if(typeof a!="undefined"){alert("ok")}

而不要去使用if(a),因為如果a不存在(為聲明)則會報錯。對于 Array,Null 等特殊對象使用 typeof 一律返回 object,這正是 typeof 的局限性。

經(jīng)常會在js里用到數(shù)組,比如 多個名字相同的input, 若是動態(tài)生成的, 提交時就需要判斷其是否是數(shù)組.

if(document.mylist.length != "undefined" ) {} //這個用法有誤.

正確的是
if( typeof(document.mylist.length) != "undefined" ) {}

或 if( !isNaN(document.mylist.length) ) {}

在JavaScript中,判斷一個變量的類型常常會用typeof運算符,在使用該運算符時采用引用類型存儲值會出現(xiàn)一個問題,無論引用的是什么類型的對象,他都返回”object“,這時就要用到instanceof

2. instanceof 檢測某個對象是不是另一個對象的實例,即測試一個對象在其原型鏈中是否存在一個構(gòu)造函數(shù)的prototype屬性

語法: object(要檢測是對象) instanceof constructor(某個構(gòu)造函數(shù))
如 :var a=new Array();

alert(a instanceof Array); // true,

同時 alert(a instanceof Object) //也會返回 true;

這是因為 Array 是 object 的子類。

再如:function test(){};

var a=new test();

alert(a instanceof test) 會返回true

另外,更重的一點是 instanceof 可以在繼承關(guān)系中用來判斷一個實例是否屬于它的父類型。

例如:

function Foo(){}
Foo.prototype = new Aoo();//JavaScript 原型繼承
var foo = new Foo();
console.log(foo instanceof Foo)//true
console.log(foo instanceof Aoo)//true

上面的代碼中是判斷了一層繼承關(guān)系中的父類,在多層繼承關(guān)系中,instanceof 運算符同樣適用。

?著作權(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)容

  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,554評論 6 13
  • 魔鬼和天使(一) 有一位美麗的天使, 她的名字叫奶格瑪。 她來自宇宙源頭一個叫娑薩朗的光明凈土, 在那里生活著她的...
    靜靜印心閱讀 295評論 1 1
  • 中世紀(jì)歐洲仆人的標(biāo)準(zhǔn)敬禮姿勢是:行禮時須脫帽,右手握住帽前檐中央將帽取下。右手垂下后身體對正,用立正姿勢,雙目 注...
    AA閆現(xiàn)召閱讀 859評論 2 1
  • 糟糕的一天,不知道這整個一天是如何過的,還把最重的接孩子也耽擱了,搞的被大男人教育了一個晚上,作罷!凌晨2...
    幽蘭依依閱讀 132評論 1 2
  • 本有從大連到西安的直達火車,馬曉白卻并不著急時間,來大連時是從煙臺坐的輪渡,他現(xiàn)在便又想去坐一坐那輪渡,到達煙臺后...
    馬曉白閱讀 608評論 2 1

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