zoukankan      html  css  js  c++  java
  • js如何判断数组是Array类型

    在说明如何判断一个对象为数组类型前,我们先巩固下js的数据类型,js一共有六大数据类型:number、string、object、Boolean、null、undefined。
    var str="string";
    console.log(typeof str); //string
    var num=1;
    console.log(typeof num); //number
    var bn=false;
    console.log(typeof bn); //boolean
    var a;
    console.log(typeof a); //undfined
    var obj = null;
    console.log(typeof obj); //object
    var doc = document;
    console.log(typeof doc);//object
    var arr = [];
    console.log(arr); //object
    var fn = function(){};
    console.log(typeof fn); //function
    除了前四个类型外,null、对象、数组返回的都是object类型;对于函数类型返回的则是function,再比如typeof(Date),typeof(eval)等。接下来进入正题,js判断数组类型的方法。
    方法一: 使用instanceof方法
    instanceof 用于判断一个变量是否某个对象的实例,左边操作数是一个对象,右边操作数是一个函数对象或者函数构造器。原理是通过判断左操作数的对象的原型链上是否具有右操作数的构造函数的prototype属性。
    a instanceof b?alert("true"):alert("false") //注意b值是你想要判断的那种数据类型,不是一个字符串,比如Array。
    举一个例子:
    var arr=[];
    console.log(arr instanceof Array) //返回true
    方法二: 使用constructor方法
    在W3C定义中的定义:constructor 属性返回对创建此对象的数组函数的引用,就是返回对象相对应的构造函数。从定义上来说跟instanceof不太一致,但效果都是一样的。
    那么判断各种类型的方法:
    console.log([].constructor == Array); //true
    console.log({}.constructor == Object); //true
    console.log("string".constructor == String); //true
    console.log((123).constructor == Number); //true
    console.log(true.constructor == Boolean); //true
    注意:
    使用instaceof和construcor,被判断的array必须是在当前页面声明的!比如,一个页面(父页面)有一个框架,框架中引用了一个页面(子页面),在子页面中声明了一个array,并将其赋值给父页面的一个变量,这时判断该变量,Array ==object.constructor;会返回false;
    原因:
    1、array属于引用型数据,在传递过程中,仅仅是引用地址的传递。
    2、每个页面的Array原生对象所引用的地址是不一样的,在子页面声明的array,所对应的构造函数,是子页面的Array对象;父页面来进行判断,使用的Array并不等于子页面的Array。
    方法三: 使用Object.prototype.toString.call(arr) === '[object Array]'方法
    function isArray(o) {
      return Object.prototype.toString.call(o);
    }
    var arr=[2,5,6,8];
    var obj={name:'zhangsan',age:25};
    var fn = function () {}
    console.log(isArray(arr)); //[object Array]
    console.log(isArray(obj)); //[object Object]
    console.log(isArray(fn)); //[object function]
    方法四:ES5定义了Array.isArray:
    Array.isArray([]) //true

    参考:https://blog.csdn.net/u010297791/article/details/55049619
    参考:https://www.cnblogs.com/linda586586/p/4227146.html
  • 相关阅读:
    Educational Codeforces Round 6
    Educational Codeforces Round 5
    [Educational Round 5][Codeforces 616F. Expensive Strings]
    [Codeforces Round #508 (Div. 2)][Codeforces 1038E. Maximum Matching]
    Codeforces Round #509 (Div. 2)
    从零开始编写一个vue插件
    Web前端错题模糊题记录
    vue中响应式props办法
    vue中router-link的click事件失效的解决办法
    ubuntu修改顶栏颜色
  • 原文地址:https://www.cnblogs.com/lingdu87/p/9152806.html
Copyright © 2011-2022 走看看