向javascript数组添加类似于长度的属性

向javascript数组添加类似于长度的属性,javascript,arrays,Javascript,Arrays,是否可以将属性添加到javascriptArraylike length中,这些属性不会在For in循环中被迭代,但对于创建的每个实例具有不同的值 以下代码: a = new Array(); a.dimension = 2; //add a new property to array 这里,如果在for in循环中使用迭代a,维度也将被迭代,这是我不想要的 可以添加这样的属性吗?可以。使用- Object.defineProperty(a, "dimension", { enume

是否可以将属性添加到javascript
Array
like length中,这些属性不会在
For in
循环中被迭代,但对于创建的每个实例具有不同的值

以下代码:

a = new Array();
a.dimension = 2; //add a new property to array
这里,如果在
for in
循环中使用
迭代
a
,维度也将被迭代,这是我不想要的


可以添加这样的属性吗?

可以。使用-

Object.defineProperty(a, "dimension", {
    enumerable: false,
    configurable: true,
    writable: true,
    value: 2
});
这将为
a
创建一个名为
dimension
的属性,该属性不会在for..in循环中枚举

您可以定义一个函数来创建如下属性-

function defineArrayProperties(object, property, value) {
    Object.defineProperty(object, property, {
        enumerable: false,
        configurable: true,
        writable: true,
        value: value
    });
}
var b = [];
defineArrayProperties(b, "dimension", 3);
然后你可以这样称呼它-

function defineArrayProperties(object, property, value) {
    Object.defineProperty(object, property, {
        enumerable: false,
        configurable: true,
        writable: true,
        value: value
    });
}
var b = [];
defineArrayProperties(b, "dimension", 3);
您还可以在
数组
原型中创建此函数,并默认让所有数组对象继承它-

Array.prototype.defineProperty = function (property, value) {
    Object.defineProperty(this, property, {
        enumerable: false,
        configurable: true,
        writable: true,
        value: value
    });
};

var b = [];
b.defineProperty("dimension", 4);
alert(b.dimension);   // will alert 4
在此演示上述两种方法。我已经创建了两个数组对象,并使用中的…枚举了它们的所有属性。请注意,
维度
不会显示在任何for…in中

编辑


您的浏览器必须支持ECMAScript 5才能使
对象.defineProperty
正常工作。

在循环中失败,我仍然得到维度迭代var arr=new Array();defineProperty(arr,“dimension”,{可枚举:false,可配置:true,可写:true,值:2});对于(a in-arr){console.log(a);}//mybad…在我的代码中的某个地方向原型添加了dim,这导致了这个问题…修复了那个问题,它工作得很好..非常感谢