Javascript 为什么减少数组的长度会使最后一个元素未定义,但长度不会';你不会变吗?

Javascript 为什么减少数组的长度会使最后一个元素未定义,但长度不会';你不会变吗?,javascript,arrays,Javascript,Arrays,你好,我是javascript新手 我试图将数组的长度减少1 我这样做了,最后一个元素现在是未定义的,但长度仍然是5 var-arr=[1,2,3,4,5]; arr.length=arr.length--; 控制台日志(arr); 控制台日志(arr.length)arr.length--会将长度减少1,但会返回以前的长度,这意味着您将数组的长度减少1,然后立即将以前的长度指定给arr.length,这意味着您将其更改回五元素数组(但是您已经删除了第五个元素,因此现在是未定义的) 如果只想减

你好,我是javascript新手

我试图将数组的长度减少1

我这样做了,最后一个元素现在是未定义的,但长度仍然是5

var-arr=[1,2,3,4,5];
arr.length=arr.length--;
控制台日志(arr);
控制台日志(arr.length)
arr.length--
会将长度减少
1
,但会返回以前的长度,这意味着您将数组的长度减少1,然后立即将以前的长度指定给
arr.length
,这意味着您将其更改回五元素数组(但是您已经删除了第五个元素,因此现在是
未定义的

如果只想减少数组的长度,可以单独使用
arr.length--;

var-arr=[1,2,3,4,5];
arr.length;
控制台日志(arr);

console.log(arr.length);
您需要使用
array.prototype.pop
来减小数组的大小:

var-arr=[1,2,3,4,5];
arr.pop();
控制台日志(arr);

console.log(arr.length);
如果要减少,可以使用“splice”

var arr = [1, 2, 3, 4, 5];
    
arr.splice(arr.length-1);

console.log(arr);        //[1,2,3,4]   --Expected Log 
console.log(arr.length); //4           --Expected Log 
或者您可以尝试以下方法:

var arr = [1, 2, 3, 4, 5];

arr.pop();

console.log(arr);        //[1,2,3,4]   --Expected Log 
console.log(arr.length); //4           --Expected Log 

array.length=array.length中发生的事件的时间线--

  • --
    操作符将
    数组。长度从
    5
    更改为
    4
  • array.length--
    计算为
    array.length
    的上一个值,即
    5
  • 此值被分配给
    array.length
    ,将其从
    4
    更改为
    5
因此,您先缩小阵列,然后再增加阵列

我的建议是:避免变异数组,而是使用
slice

var-arr=[1,2,3,4,5];
var newArr=arr.slice(0,-1);
控制台日志(newArr);

console.log(newArr.length);
尝试
array.length=array.length-1
简单地
array.length-->
也可以工作。前后递增/递减运算符更改变量或属性的值;不需要额外的赋值。您也可以使用前递减运算符执行此
arr.length=--arr.length;
但是<代码>arr.length--
可以做任何事情,无需将其分配回使用
--
++
作为更大表达式的一部分会导致灾难。看在上帝的份上,不要写类似
x=x--
的东西这不是这个问题的答案。