zoukankan      html  css  js  c++  java
  • javascript是判断对象是否是数组

    JS中的数据类型:

    2大类
     原始类型:值保存在变量本地的数据类型
      5种:Number String Boolean undefined null
      Number:8bytes 舍入误差-->四舍五入
      String:每个英文字符 1byte
          每个汉字字符 2bytes
          一旦创建内容不可改变
      Boolean: true false
    引用类型:值不保存在变量本地的数据类型

      js中的变量 vs 数据库
       内存中    硬盘上的文件
       临时的    持久的
       客户端    服务器端只存一份

    一般用typeof判断数据类型:如下>注意最后一个

    console.log(typeof("Hello")); //string
    console.log(typeof(123)); //number
    console.log(typeof({a:1})); //object
    console.log(typeof(function f(){})); //function
    console.log(typeof([])); //object

    为什么不是array呢?该如何判断一个对象是object还是array类型呢?

      typeof可以检测基本类型包括 undefined, string, number, boolean,但是对于检测对象就不靠谱了。

      不只是Array,javascript中的对象,包括 Date, String, Boolean, Number, Object, Function, Array, RegExp, Error 使用typof只会返回 "object"。

    下面给出4中方法:

    //如果当前浏览器的Array构造函数对象中不包含isArray
        if(!Array.isArray){
        //    为Array构造函数添加isArray方法
            Array.isArray=function(obj){
                //判断obj是不是数组类型4种
                //1. 如果Array.prototype在obj的原型链中
                  //return Array.prototype.isPrototypeOf(obj);
                //2. 用instanceof: 语法:obj instanceof 构造函数名
                //return obj instanceof Array;
                //实例:一个构造函数创建出的每个具体对象
                //3. 原型对象的constructor属性
                //return obj.constructor==Array;
                //4. 利用Object原型的toString方法
                /*call,apply
                    call,在调用方法的一瞬间更换调用方法的对象*/
                return Object.prototype.toString.apply(obj)=="[object Array]";
            }
        //  
        }

    注意:(来自https://segmentfault.com/q/1010000000130605)

    使用 instanceof 或者 constructor 来检测 Array 也不是靠谱的办法。

    如果是待检测的数组来自一个iframe的数组时,instanceof和contructor都会失效。

    由于每个iframe都有一套自己的执行环境,跨frame实例化的对象彼此是不共享原型链的。

    var iframe = document.createElement('iframe');   
      document.body.appendChild(iframe);   
      xArray = window.frames[window.frames.length-1].Array;   
      var arr = new xArray(1,2,3); // [1,2,3]    
      arr instanceof Array; // false    
      arr.constructor === Array; // false
  • 相关阅读:
    sublime tex创建可服用的片段
    php unset
    使用VS.NET来制作安装程序
    手机暗码大全.(挺好玩的..)
    【转】双目运算符 "??"
    linuxcp命令
    ios——在iPhone程序中打开其它程序
    IOS地图项目01网络编程很难么???
    C# BitArray 实例
    Windows Phone 8使用初体验
  • 原文地址:https://www.cnblogs.com/-walker/p/5603090.html
Copyright © 2011-2022 走看看