使对象成为一个数组

时间:2014-07-01 19:18:08

标签: javascript arrays

是否可以使JavaScript对象成为一个数组?也就是说,在保持其现有属性的同时,开始表现得像lengthpushforEach等数组?我有一个模糊的想法,即通过重新分配原型可以实现这一点,但有些尝试通过反复试验来避免产生任何结果。

2 个答案:

答案 0 :(得分:1)

不,你不能。虽然理论上(通过non-standard ways)重新分配原型,但它不会更改其内部[[Class]]并获得魔法.length属性。

相反,尝试将对象的所有属性复制到新数组中。

答案 1 :(得分:0)

我不确定您为什么要这样做,除了访问.length.push()forEach之外,正如您所提到的那样。据我所知,你不能强迫这些属性/函数在一个对象上工作,但你当然可以绕过它们:

.length(来自here):

Object.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};

// Get the size of an object
var size = Object.size(myObj);

.push()

obj.key = value; //there isn't a much shorter way to add something to an object since you have to specify a key and a value

forEach

for(key in obj){
  var value;
  if(obj.hasOwnProperty(key)){
     value = obj[key]; //you now have access to the key and the value in each iteration of obj
  }
}