关于javascript中的数组长度

关于javascript中的数组长度,javascript,Javascript,我可以给空数组指定一个长度吗?这个数组只需要那么长的元素。 例如: var emptyArray = []; // but I need this array takes only 10 elements for (var i = 0; i < 50; i++) { emptyArray.push(i); } console.log(emptyArray.length) // I want to see 10 console.log(emptyArray) // [0,

我可以给空数组指定一个长度吗?这个数组只需要那么长的元素。 例如:

 var emptyArray = []; // but I need this array takes only 10 elements
 for (var i = 0; i < 50; i++) {
     emptyArray.push(i);
 }
 console.log(emptyArray.length) // I want to see 10
 console.log(emptyArray) // [0,1,2,3,4,5,6,7,8,9]
var emptyArray=[];//但我需要这个数组只需要10个元素
对于(变量i=0;i<50;i++){
空射。推(i);
}
console.log(emptyArray.length)//我想看看10
控制台日志(清空阵列)/[0,1,2,3,4,5,6,7,8,9]

并非如您所愿,但您可以使用类似的:

var emptyArray = Array.from({length:50}, (v,i) => undefined);
for(let i=0; i<emptyArray;i++){
    emptyArray.push(i);
}
var emptyArray=Array.from({length:50},(v,i)=>未定义);

对于(设i=0;i不直接为您所需,但是您可以有类似的内容:

var emptyArray = Array.from({length:50}, (v,i) => undefined);
for(let i=0; i<emptyArray;i++){
    emptyArray.push(i);
}
var emptyArray=Array.from({length:50},(v,i)=>未定义);

对于(设i=0;i一种方法是定义自己的
array
并重新定义
push
方法

函数MyArray(){};
MyArray.prototype=Object.create(Array.prototype);
MyArray.prototype.push=函数(项){
如果(此长度小于10){
Array.prototype.push.call(此项);
} 
}
const arr=new MyArray();
for(设i=0;i<50;i++){
arr.push(i);
}

console.log(arr);
一种方法是定义自己的
数组
并重新定义
推送
方法

函数MyArray(){};
MyArray.prototype=Object.create(Array.prototype);
MyArray.prototype.push=函数(项){
如果(此长度小于10){
Array.prototype.push.call(此项);
} 
}
const arr=new MyArray();
for(设i=0;i<50;i++){
arr.push(i);
}
console.log(arr);
您可以尝试Object.seal()。请注意,在本例中,我没有使用push(),因为这会引发错误,而是分配值,因为固定长度数组中的值是可变的

var emptyArray=新数组(10)。填充(0);
物体。密封(空的射线);
对于(变量i=0;i<50;i++){
空数组[i]=i;
}
console.log(emptyArray.length)//我想看看10
console.log(emptyArray)/[0,1,2,3,4,5,6,7,8,9]
您可以尝试Object.seal()。请注意,在本例中,我没有使用push(),因为这会引发错误,而是使用赋值,因为固定长度数组中的值是可变的

var emptyArray=新数组(10)。填充(0);
物体。密封(空的射线);
对于(变量i=0;i<50;i++){
空数组[i]=i;
}
console.log(emptyArray.length)//我想看看10

console.log(emptyArray)/[0,1,2,3,4,5,6,7,8,9]
另一种方法是使用:

功能限制阵列(长度){
返回新的代理服务器([]{
设定:(目标、道具、价值)=>{
if(编号(道具)<长度){
目标[prop]=价值;
}
返回true;
}
});
}
var tenArray=limitedArray(10);
对于(设i=0;i<50;++i){
tenArray.push(i);
}

console.log(Array.from(tenArray));//[0,1,2,3,4,5,6,7,8,9]
另一种方法是使用:

功能限制阵列(长度){
返回新的代理服务器([]{
设定:(目标、道具、价值)=>{
if(编号(道具)<长度){
目标[prop]=价值;
}
返回true;
}
});
}
var tenArray=limitedArray(10);
对于(设i=0;i<50;++i){
tenArray.push(i);
}

console.log(Array.from(tenArray));//[0,1,2,3,4,5,6,7,8,9]
否,但您可以在推送之前检查其长度,也可以选择将该检查包装到函数或对象中。您可以定义自己的对象类型,该类型类似于数组,但限制其大小。在第11次推送时,您想要的行为是什么?错误?沉默?将早期元素推离另一端?所有这些都是可行的,但您需要确定这对于您的应用程序来说是正确的。@Mark_M:Silence–请参见postNo中的示例,但您可以在推送之前检查其长度,也可以将该检查包装到函数或对象中。您可以定义自己的对象类型,其行为类似于数组,但限制其大小。您希望在第11次推送时有什么行为?错误?Silence?提前推送另一端的元素?所有这些都是可行的,但您需要决定哪一个对您的应用程序是正确的。@Mark_M:Silence–请参见文章中的示例,这取决于代码的使用位置,对吗?我认为您不能对代理使用transpiling或polyfilling。代理没有Internet Explorer支持,对吗?取决于e代码正在被使用,对吗?我不认为你可以对代理使用transpiling或polyfilling。代理没有Internet Explorer支持,对吗?这将是优雅的,但它将在严格模式下抛出。这将是优雅的,但它将在严格模式下抛出。