如何判斷一個對象是不是數值


要判斷一個對象是不是數組的方式有多種,這里我們一個一個來分析:

第一種:采用 Array.isArray()方法(存在兼容性問題

在使用Array.isArray方法之前,我們先來普及一下它的作用以及如何使用:

                      ① 作用:它是用於判斷某個對象是否是數組;

                      ② 使用:語法格式   Array.isArray(對象)

下面我們就用一個小實例來看看它怎么判斷一個對象是不是數組:

    function Person(name){
        this.name = name;
    }
    var p1 = new Person("張三");    
    console.log(Array.isArray(p1));  //false var arr1 =["zhang","li","zhou","wu","zheng","wang"];
    console.log(Array.isArray(arr1)); //true
    console.log("-----------------");
    var arr2 = new Array("abc");
    console.log(Array.isArray(arr2));  //true

從上面的代碼我們很容易就可以學到用  Array.isArray()方法來判斷,很多人可能覺得,媽呀,太簡單了,然鵝.......Array.isArray()  是ES5的新特性,它存在兼容性問題

那如果瀏覽器不支持ES5的話,上面這種方式和沒說一樣,接下來我們來分析其他判斷數組的方式

 

第二種:判斷是否有push或者其他數組的方法(不嚴謹)

很多人這時候會想到,判斷數組自帶的方法不就可以了嘛?下面我們來寫一段代碼分析:

 

    function Dog(){
        this.name="阿黃";
    }
    var dog = new Dog();
    var arr1 = new Array("a","b","c");
    console.log(dog.name);   //阿黃
    console.log(arr1);     //["a", "b", "c"]
    //1 判斷 dog 和arr1哪個是數組

    if (typeof dog.push == "function"){
        console.log("dog是數組");
    }
    if (typeof arr1.push =="function"){       //arr1是數組
        console.log("arr1是數組");
    }

    // 2 這樣看好像滿足了,但是如果我們給dog的原型對象添加一個 push方法,會出現什么現象呢?
    Dog.prototype.push = function(){
        console.log("我是dog的push方法");
    }

    console.log("-----------------------");
    // 3 再來 判斷 dog 和arr1哪個是數組
    if (typeof dog.push == "function"){   //會打印 dog是數組
        console.log("dog是數組");
    }
    if (typeof arr1.push =="function"){       //arr1是數組
        console.log("arr1是數組");
    }

如果不懂什么是原型對象的,可以看看我寫的什么是原型對象的文章,下面,我還是畫圖為大家分析一下:

 

 

分析完了,我們就知道這個方法是不可行的,因為它太不嚴謹了,要是你這樣寫,你合作的小伙伴會很不高興的.....

 

第三種:利用toString()結合call()來實現(終極武器)

像之前一樣,我們先來普及一下toString()方法和call()方法:

              Ⅰ. toString()

                        ⅰ.作用:toString() 方法可把一個邏輯值轉換為字符串,並返回結果。

                              ❶ 如果調用toString的是 非 Object類型的對象     typeof 調用者.toString()  都是string類型

                              ❷ 如果調用toString的是 Object構造函數創建的實例對象        調用者.toString()   輸出的是 [Object Object],它表示 [類型,構造函數]

                   這里我們用一個例子來說明一下toString()

 

     var arr1 = new Array("a","b","c");
    console.log(arr1.toString());   // a,b,c
    var obj1 = {
        age:12
    }
    console.log(obj1.toString()); //[object Object]

 

注意點:這里的arr1.toString() 和  obj1.toString()方法不是同一個方法,

接下來,我們畫一個圖來分析他們分別來源自哪兒

 

               Ⅱ. call()

                        ⅰ.作用:借用其他對象的方法。

                        ⅱ.用法:被借對象.方法名.call(借用對象)

這里也通過一個小的實例來說明一下 call()方法:

 

    function Person(){
        this.name ="aa";
    }
    Person.prototype.show = function(){
        this.age = 23;
    }
    function  Boy(){
    }
    var boy = new Boy();

    // 需求:讓boy也可以使用show方法來獲得年齡屬性
    Person.prototype.show.call(boy);
    console.log(boy);

 

 

接下來,我們要判斷一個數組,只要證明它的構造函數是Array,即 調用toString可以打印出 [Object  Array];由上面的圖可知,我們可以讓 arr1 借用 Object.prototype的toString()方法,實現過程如下:

   // 首先測試一下借用能否實現
    var arr1 = new Array("a","b","c");
    console.log(arr1.toString());   // a,b,c
    var obj1 = {
        age:12
    }
    console.log(obj1.toString()); //[object Object]

    console.log(Object.prototype.toString.call(arr1));  //[object Array]

    console.log("-----------------------");

    // 做兼容性處理
    // 1 判斷瀏覽器是否支持 Array.isArray方法,如果不支持,那么就給他設置一個Array.isArray方法 ;利用我們自己寫的這個方法來判斷

    if(Array.isArray != "function"){
        Array.isArray =function(obj){
            return Object.prototype.toString.call(obj) == "[object Array]";
            
            // 注意這里返回的是一個布爾值,傳入的參數是數組實例對象
        }
    }

總結: 這里是如何判斷數組,其實也可利用這種方式來判斷日期類型,大家沒事可以嘗試着寫寫。我的表達能力有限,有些地方可能描述的不夠清楚,有什么改進的地方,大家可以提提意見

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM