如何判断javascript变量的数据类型是否为Array?

时间:2012-06-13 05:46:39

标签: javascript object types

我在下面尝试了三种方式,结果是右边的注释,难以理解的是我与Object数据类型不同。我怎样才能得到类似Array的数据类型或String但不是Object

   var arr = [];
   console.log('type of arr', typeof arr); //objct
   console.log('instanceof array', arr instanceof Array); //true
   console.log('instanceof object', arr instanceof Object);  // true

5 个答案:

答案 0 :(得分:3)

这是一种技巧:

> var arr = [];
> Object.prototype.toString.call(arr);
"[object Array]"

这样做是使用toString指针传入的任何内容调用原型对象的this方法。有关此技术的更多信息,请参阅the reference on call

事实证明,您也可以使用此技术来确定其他对象类型:

> var func = function(){}
> Object.prototype.toString.call(func);
"[object Function]"

> var obj = {};
> Object.prototype.toString.call(obj);
"[object Object]"

答案 1 :(得分:3)

你可以使用jQuery的“isArray”函数来实现这个

var arr1 =[];
alert(jQuery.isArray(arr1));  // true

var arr2 = new Array();
alert(jQuery.isArray(arr2));  // true

var obj = new Object();
alert(jQuery.isArray(obj));   // false

答案 2 :(得分:1)

我在MDN上获得了这个信息 - 在Javascript版本1.8.5中添加了Array.isArray并且它是​​ECMAScript 5中的标准

// all following calls return true
Array.isArray([]);
Array.isArray([1]);
Array.isArray( new Array() );
Array.isArray( Array.prototype ); // Little known fact: Array.prototype itself is an array.

如果isArray不可用

if(!Array.isArray) {
  Array.isArray = function (vArg) {
    return Object.prototype.toString.call(vArg) === "[object Array]";
  };
}

有关MDN

的更多详情

答案 3 :(得分:0)

这很简单,你的问题确实是你的答案,

var arr = [];
if('instanceof object', arr instanceof Object){
    alert('arr is a object');
    if('instanceof array', arr instanceof Array){
        alert('arr is a Array');
    }
}​else{
    alert('this is not a object');
}

现在让我们使用一个简单的变量testObj,这甚至不是一个对象,那么它可能是一个数组,

    var testObj;
    if('instanceof object', testObj instanceof Object){
      alert('testObj is a object');
    }else{
      alert('testObj is not a object');
    }
​ 

试试more

答案 4 :(得分:0)

Array始终是对象的实例 - Object是javascript中的基础对象,而new创建的任何其他对象都是继承自的。

 new String('a') instanceof Object // true - also instance of String
 new Number(3) instanceof Object // true -also instance of Number etc.
 new Boolean(true) instanceof Object // true
 new Date instanceof Object // true
 new function(){} instanceof Object // true

 [] instanceof Object // true - [] is equal to new Array

 check this out: 
 Array = 1;
 [] //TypeError: Cannot read property 'slice' of undefined
 :)

然而

'a' instanceof Object // false
 3 instanceof Object // false   

试试这个:

 var str = 'aaa',
     arr  = [],
     myClass = function(){},
     myClassInstance = new myClass;

 str.constructor == String // true
 arr.constructor == Array // true
 myClassInstance.constructor == myClass // true