javascript - 将属性添加到类似于长度的javascript数组

标签 javascript arrays

是否可以向 javascript Array 添加属性,例如 length,它不会在 For IN 循环中被迭代,但对于创建的每个实例都有不同的值

以下代码:

a = new Array();
a.dimension = 2; //add a new property to array

如果使用 for in 循环迭代 a,维度也会被迭代,这是我不希望的。

是否可以添加这样的属性?

最佳答案

是的,这是可能的。使用 defineProperty -

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);

也可以在Array原型(prototype)中创建这个函数,让所有的数组对象默认继承它——

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

A Live Fiddle 在这里展示了上述两种方法。我创建了两个数组对象并使用 for...in 枚举了它们的所有属性。请注意,dimension 不会出现在任何 for...in 中。

编辑

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

关于javascript - 将属性添加到类似于长度的javascript数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18503727/

相关文章:

c - 同时对两个数组进行并行数组快速排序

javascript 数组 'undefined' 控制台日志

javascript - 我如何实际显示 Workbox 中更新的 index.html?

javascript - Vue Chart.js 加载时不显示数据

php - javascript 字符串变量的字符限制

java - jmeter jsonpath 数组长度的表达式

javascript - 如何获取多个复选框值并分配给隐藏字段

javascript - 如何将类型对象的 json 数组传递给 MVC Controller 类

Javascript显示带有动画的onclick

javascript - 在异步模式下执行 javascript 函数