0

我在下面尝试了三种方式,结果是右边的评论,困难是我不能将它与Object数据类型区别开来。我怎样才能得到它的数据类型ArrayString但不是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
4

5 回答 5

3

这是一种技术:

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

它的作用是调用toString原型对象的方法,使用传入的任何内容作为this指针。有关此技术的更多信息,请参阅call.

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

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

> var obj = {};
> Object.prototype.toString.call(obj);
"[object Object]"
于 2012-06-13T05:51:19.103 回答
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
于 2012-06-13T05:56:02.923 回答
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

于 2013-04-17T01:56:18.667 回答
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');
    }
​ 

试试这个以获得更多

于 2012-06-13T05:55:00.333 回答
0

数组总是对象的实例 -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
于 2012-06-13T06:09:20.027 回答