JavaScript中如何覆盖数组长度

4

我认为有一种方法可以覆盖JavaScript数组的长度值,并返回任意随机值。
举个例子...

 a=[56,78,89,200,800]
 b=['a','b','f']

 a.length = 2  ;  //should give me only 2;
 b.length = 2  ; //also should give 2  

是否可以更改长度属性,是否有任何技巧可以更改splice或slice方法。


1
你尝试过改变它吗? - Rayon
你能否直接硬编码它们返回2? - wmash
@bharathmuppa,请阅读array.length - Rayon
2
“我有一个想法,可以覆盖JavaScript数组长度值” - 这个想法是错误的。你实际上想做什么? - Bergi
我只是在浏览数组中可写的所有属性,但根据文档它是可写的,所以我尝试将array.length更改为某个值,但这并没有发生。 - bharath muppa
显示剩余3条评论
1个回答

2

Array.length 是一个受保护的属性,只能读取;尝试修改它是不好的想法。

更好的方式:您可以创建自己的类。例如:

var oArray = function (aArr){
    oRet = {};

    for(var i = 0, aArrL = aArr.length; i < aArrL; i++){
        oRet[i] = aArr[i];
    }
    oRet.length = 2;

    return oRet;
};

a= new oArray([56,78,89,200,800]);
b=['a','b','f'];

console.log(a.length);
console.log(b.length);

a 是一个自定义类,b 是标准的 JavaScript 数组。


4
"Array.length" 是一个受保护的属性,只能读取;尝试改变它是个坏主意。 不,它并不是受保护的,它可以被修改,并且根据情况,改变它是一个相当好的想法,比如通过将其长度设置为0来清空数组而不破坏其引用。 - Redu
1
你可以改变值,比如 b.length = 2;(并删除最后一个值),但不能改变其行为,比如 Array.prototype.length = 2;。也许我表达不太准确。 - José M. Carnero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接