javascript - 是否可以在javascript中创建一个固定长度的数组?

标签 javascript arrays

是否可以在 Javascript 中创建一个长度保证保持不变的数组?
例如,数组 A以长度 2 创建。随后,任何尝试调用 A.push()A.pop() , 或设置 A[5] 的值将失败。 A.length永远是 2。
这是类型化数组(例如 Float32Array )已经工作的方式。他们有固定的大小。但我想要一种在常规数组上获得相同行为的方法。
对于我的具体情况,我想创建一个固定长度的数组,其中每个条目都是一个对象。但我仍然想知道一般问题的答案。

最佳答案

更新:
Object.seal (这是 ES2015 的一部分)将做到这一点:

// create array with 42 empty slots
let a = new Array(42);

if(Object.seal) {
  // fill array with some value because
  // empty slots can not be changed after calling Object.seal
  a.fill(undefined);

  Object.seal(a);
  // now a is a fixed-size array with mutable entries
}
原答案:
几乎。正如 titusfx 所建议的那样您可以卡住对象:
let a = new Array(2);

// set values, e.g.
a[0] = { b: 0; }
a[1] = 0;

Object.freeze(a);

a.push(); // error
a.pop(); // error
a[1] = 42; // will be ignored
a[0].b = 42; // still works
但是,您无法更改卡住对象的值。
如果您有一组对象,这可能不是问题,因为您仍然可以
更改对象的值。
对于数字数组,当然有 typed arrays .Object.freezeES2015 but most browsers seem to support it, including IE9 的一部分.您当然可以对其进行功能测试:if(Object.freeze) { Object.freeze(obj); }

关于javascript - 是否可以在javascript中创建一个固定长度的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21988909/

相关文章:

javascript - 如何始终在 Android 上可靠地播放 HTML5 音频?

javascript - 对于由 JavaScript 插入的链接,不会显示警报

javascript - 所有内容异步加载后捕获页面

javascript - 复杂场景下如何过滤重复行

arrays - 对包含另一个可选项的可选项数组进行排序

javascript - 选择默认箭头不会在 FF 上隐藏

arrays - excel vba : dictionary and array; new entry is by values or by reference?

java - 为什么我不能在类之外的方法中使用数组?

javascript - 使用 javascript/jquery 显示基于随机打乱数组的 div

javascript - FlexiGrid - 在代码中设置网格宽度