判斷一個變量類型是數組還是對象


  因為無論是數組還是對象,對於typeof的操作返回值都為object,所以就有了區分數組類型和對象類型的需要:

方一:通過length屬性:一般情況下對象沒有length屬性值,其值為undefiend,而數組的length值為number類型

  缺點:非常不實用,當對象的屬性存在length,且其值為number(比如類數組),則該方法失效,不建議使用,看看即可。

*方二:通過instanceof來判斷區分

  

        var arr = [1, 2, 3];
        var obj = {
            name: 'lyl',
            age: 18,
            1: 'name'
        }
        console.log(arr instanceof Array); //true
        console.log(obj instanceof Array); //false

*方三:通過constructor

  

     var arr = [1, 2, 3];
        var obj = {
            name: 'lyl',
            age: 18,
            1: 'name'
        }
        console.log(arr.constructor === Array); //true
        console.log(obj.constructor === Array); //false

*方四:通過toString()方法,數組原型和對象原型定義的toString()方法不同

  原理參考:http://www.cnblogs.com/ziyunfei/archive/2012/11/05/2754156.html

  

     var arr = [1, 2, 3];
        var obj = {
            name: 'lyl',
            age: 18,
            1: 'name'
        }
        console.log(Object.prototype.toString.call(arr) === '[object Array]'); //true
        console.log(Object.prototype.toString.call(boj) === '[object Array]'); //false

 

方五:隨便找一個數組僅有的方法,來判斷數組和對象誰有該方法即可(樣例以sort來舉例)

  

     var arr = [1, 2, 3];
        var obj = {
            name: 'lyl',
            age: 18,
            1: 'name'
        }
   console.log(arr.sort
=== Array.prototype.sort); //true console.log(obj.sort === Array.prototype.sort); //false

 

  

   總結:方法應用權重:

    優先使用方四toString,因為該方法幾乎無缺陷。

    次之可以使用方二instanceof和方三constructor

    剩下的方法玩玩即可,不實用

  


免責聲明!

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



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