向javascript数组添加类似于长度的属性
是否可以将属性添加到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
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,这导致了这个问题…修复了那个问题,它工作得很好..非常感谢