我在下面尝试了三种方式,结果是右边的注释,难以理解的是我与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
答案 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