javascript中的while(i--)循环

javascript中的while(i--)循环,javascript,Javascript,我通常使用while循环作为: while (i<some_value) 但是当我尝试 while((num_arr.length)--) console.log(num_arr); [4, 8, 7, 1] [4, 8, 7] [4, 8] [4] [] // WHY IS THIS HAPPENING?? 要使用此语法,是否需要了解一些隐藏的内容?数组的length属性是可写的,当您设置它时,它将适当地切断它们的元素或添加空插槽 var items = [1, 2, 3, 4,

我通常使用while循环作为:

while (i<some_value) 
但是当我尝试

while((num_arr.length)--) console.log(num_arr);
[4, 8, 7, 1]
[4, 8, 7]
[4, 8]
[4]
[] // WHY IS THIS HAPPENING??

要使用此语法,是否需要了解一些隐藏的内容?

数组的
length
属性是可写的,当您设置它时,它将适当地切断它们的元素或添加空插槽

var items = [1, 2, 3, 4, 5];
items.length = 3; // items is now [1, 2, 3]
items.length = 6; // items is now a sparse array: [1, 2, 3, undefined × 3]

因此,请不要这样做。

数组的
length
属性是可写的,当您设置它时,它将适当地切断它们的元素或添加空插槽

var items = [1, 2, 3, 4, 5];
items.length = 3; // items is now [1, 2, 3]
items.length = 6; // items is now a sparse array: [1, 2, 3, undefined × 3]

因此,不要这样做。

当您将数组的
length
属性设置为较低的值时,末尾的项将被删除:

var-arr=[1,2,3,4,5];
arr.length;//5.
arr.length=3;
arr;//[1,2,3]
以下章节对此进行了描述:

当newLen
  • 将oldLen设置为oldLen–1
  • 让DeleteSuccessed作为调用传递的[[Delete]]内部方法(oldLen)和false的结果 作为论据

  • 在代码中使用(
    --
    )可减少数组的
    长度。

    将数组的
    长度
    属性设置为较低的值时,末尾的项将被删除:

    var-arr=[1,2,3,4,5];
    arr.length;//5.
    arr.length=3;
    arr;//[1,2,3]
    
    以下章节对此进行了描述:

    当newLen
  • 将oldLen设置为oldLen–1
  • 让DeleteSuccessed作为调用传递的[[Delete]]内部方法(oldLen)和false的结果 作为论据

  • 在代码中使用(
    -->
    )可以减少数组的
    长度。

    当使用
    数组时。长度--
    可能会将数组每次缩短一个元素

    请参阅“缩短阵列”一节下的参考:

    Array.prototype.length
    可以通过编程方式重新编写,它可能会将数组缩短指定的新长度

    例如

    a = [1,2,3,4,5,6,7,8,9,10];
    
    // Shorten the array by one element
    a.length--; // a <-- [1,2,3,4,5,6,7,8,9]
    
    // In case you want to shorten your array to 3 elements, you can:
    a.length = 3; // a <-- [1,2,3]
    
    a=[1,2,3,4,5,6,7,8,9,10];
    //将数组缩短一个元素
    
    a、 长度--;//a执行
    array.length--
    时,可能会每次将数组缩短一个元素

    请参阅“缩短阵列”一节下的参考:

    Array.prototype.length
    可以通过编程方式重新编写,它可能会将数组缩短指定的新长度

    例如

    a = [1,2,3,4,5,6,7,8,9,10];
    
    // Shorten the array by one element
    a.length--; // a <-- [1,2,3,4,5,6,7,8,9]
    
    // In case you want to shorten your array to 3 elements, you can:
    a.length = 3; // a <-- [1,2,3]
    
    a=[1,2,3,4,5,6,7,8,9,10];
    //将数组缩短一个元素
    
    a、 长度--;//a
    num\u arr.length--
    num\u arr.length=num\u arr.length-1
    相同。现在清楚了吗?从没想过数组长度是可写的!Thanks@Jack_of_All_Trades:虽然,如果不是,这仍然不起作用–技巧取决于
    length\u of_num\u arr
    毕竟是递减的。@minitech:是的,你是对的……我的大脑工作不好。。。。感谢大家…
    num\u arr.length--
    num\u arr.length=num\u arr.length-1
    相同。现在清楚了吗?从没想过数组长度是可写的!Thanks@Jack_of_All_Trades:虽然,如果不是,这仍然不起作用–技巧取决于
    length\u of_num\u arr
    毕竟是递减的。@minitech:是的,你是对的……我的大脑工作不好。。。。谢谢你们所有人…哇!。。。。今天晚上10:28我知道一件事……Javascript你总是让我感到惊讶……这是只在Javascript中发生的事情之一吗?我不认为你可以在任何其他语言中以这种方式更改数组的长度……至少在python中我不记得了……@Jack_of_All_Trades:Jack_of_All_Trades:可能还有其他东西,但我不知道在任何其他通用语言中有可写的
    length
    属性,不。VB.NET有
    ReDim
    ,python有
    del arr[-5:]
    ,等等。尽可能使用不寻常的稍微不寻常的调整大小方法。注意:将
    长度设置为更高的值不会附加
    未定义的
    s。这应该是:
    items.length=6;//items现在是一个稀疏数组:[1,2,3,,,,,,]。附加元素不是未定义的,它们不存在(即,它们未定义,而不是存在且值未定义)。哇!。。。。今天晚上10:28我知道一件事……Javascript你总是让我感到惊讶……这是只在Javascript中发生的事情之一吗?我不认为你可以在任何其他语言中以这种方式更改数组的长度……至少在python中我不记得了……@Jack_of_All_Trades:Jack_of_All_Trades:可能还有其他东西,但我不知道在任何其他通用语言中有可写的
    length
    属性,不。VB.NET有
    ReDim
    ,python有
    del arr[-5:]
    ,等等。尽可能使用不寻常的稍微不寻常的调整大小方法。注意:将
    长度设置为更高的值不会附加
    未定义的
    s。这应该是:
    items.length=6;//items现在是一个稀疏数组:[1,2,3,,,,,,]。附加元素不是未定义的,它们不存在(即,它们未定义,而不是存在且值未定义)。