zoukankan      html  css  js  c++  java
  • [转]javascript中判断变量是否为array

    javascript中要判断一个变量是否为array通常是比较困难的,因为

    var a = [];
    alert(
    typeof a ==='object'); // true

    通常的做法是判断

    a.constructor === Array  // true
    

    可是这个方法有一个问题,如果一个数组是来自另一个frame中的,那么它的constructor 将是另一个对象。

    YUI中用了如下的方法:

    isArray: function(o) { 
            if (o) {
               return L.isNumber(o.length) && L.isFunction(o.splice);
            }
            return false;
        },
    
    

    简单来说,就是判断这个变量有没有 length 属性,同时有没有 splice 方法。可惜,这样的判断方法是可以用一个 object 来伪造数组的。

    Google 的 Mark Miller 发现,用下面方法,可以简单又可靠的得到一个变量是否一个数组:

    Object.prototype.toString.apply(value) === '[object Array]'
    

    转自:http://stauren.net/log/fqibpxyz3.html

    ----------------------------------------------------------------------------------

    总结一下:如果判断变量是否是JSON格式?则可用

    var jsondata = { "id": 123, "name": "abc" };
    alert(jsondata instanceof Object && Object.prototype.toString.apply(jsondata) === '[object Object]');
    

    var jsondata = { "id": 123, "name": "abc" };
    alert(typeof(jsondata) == 'object' && Object.prototype.toString.apply(jsondata) === '[object Object]');
    

    因为,JSON格式和Array返回的都是Object,所以需要增加判断一下,是否是数组类型。

    同样,判断function也可这样用,

    Object.prototype.toString.apply(jsondata) === '[object Function]'
    
  • 相关阅读:
    flask框架(一):初入
    .py文件打包成.exe文件
    gtk+-3.21.4 static build step in windows XP
    cairo-1.14.6 static compiler msys mingw32
    ffmpeg-20160811-bin.7z
    gtk+2.24.0-glib-2.28.1-staticLib-mingw32-x86-2016-08-10.7z
    ffmpeg-20160806-bin.7z
    glib-2.49.4-msys-x86-staticLib.7z
    Tesseract-OCR text2image.exe [ x86 支持 XP ]
    ffmpeg-20160803-bin.7z
  • 原文地址:https://www.cnblogs.com/w3live/p/1997486.html
Copyright © 2011-2022 走看看