2014-03-24 68 views
1

Javascript没有真正的数组。因为当我在谷歌控制台测试这个东西时,我惊讶地发现对象和数组之间没有区别。什么是真正的数组条件

var obj = {}; 
var arr = []; 

typeof obj; //object 
typeof arr; //object 

我很好奇地想知道

为什么会是这样?

难道真的JavaScript的持有假阵?

这是typeof是错的,我的意思是对象和数组之间的区别不?

什么是真正的阵列的条件是什么?

谢谢!

+2

有5种基本类型:空未定义的数字字符串布尔,其他所有都只是对象。如果你想真正的类型做到这一点:'({})。toString.apply([])' –

+0

你是什么意思的“真正的数组”? 'Array'是一种'Object',其属性和行为在[ECMAScript 15.4](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4)中指定。 – apsillers

+0

'[] instanceof Array; // true',但我很确定这不是最好的方法。 –

回答

2

JavaScript是一种动态语言,其对象非常灵活。而且实际上没有保证,你拥有的一个对象是特定类型的。因为我们可以做duck typing

如果你想知道,如果一个对象是一个数组或没有,你可以使用这个

Object.prototype.toString.call(obj) == '[object Array]'; 

这是从underscore.js库的_.isArray功能拍摄。由于它很受欢迎并且被广泛使用,所以这种方法应该是可靠的。

如果环境支持ECMA 5.1,那么你也可以使用Array.isArray功能,这样

Array.isArray(obj); 
+0

+1,jQuery也使用它。 –

+0

还有本地'Array.isArray'。 –

+1

@FelixKling谢谢:)我更新了我的答案。 – thefourtheye