JS中的数组长度

时间:2009-03-09 14:42:57

标签: javascript arrays

var a = [1,4,5];
var e = a.length--;

此处e变量将包含5.但如果我这样做:

var e = a.length-=1;

这里e将包含2个元素数组。
那么第一个是模拟pop()数组方法的语言'技巧'吗?

在语言语法中:

a--

a-=1

在语义上是一样的。

5 个答案:

答案 0 :(得分:5)

var a = [1, 4, 5];
var e = a.length--;

相同
var a = [1, 4, 5];
var e = a.length;
a.length = a.length - 1;

,而

 var a = [1, 4, 5];
 var e = a.length -= 1;

相同
var a = [1, 4, 5];
a.length = a.length - 1;
var e = a.length;

var a = [1, 4, 5];
var e = --a.length;

换句话说:x--在递减之前返回值,而--x(和x - = 1)在递减之后返回值。所有这些代码片段都会弹出数组a的最后一个元素。

请注意,在第一个示例e = a.length--中,e的值为3,而不是5,因此a.pop()相同。

答案 1 :(得分:2)

这是一个基本的误解:如果您评估a++,将评估a,然后递增,而++aa+=1将先递增,然后评估。

在大多数情况下,最好以更冗长的方式编写这些类型的语句,因为它们很快就会导致对正在发生的事情的混淆而没有获得任何东西(大多数编译器/解释器无论如何都会对此进行优化)。

答案 2 :(得分:1)

这不是我得到的。

相反,我得到了预期的结果。第一个例子中e = 3,第二个例子中e = 2。

在第一种情况下,a.length最初是3(因为javascript数组是稀疏的)。使用后递减,这个值(3)首先被赋值给e,然后a.length递减(实际上这很有可能)。

在第二种情况下,从3减去1使其成为2,然后将其分配给e。

所以我认为没有什么花哨的,真的。

答案 3 :(得分:1)

var a = [1,4,5];
var e = a.length--;

e将不包含5.它将包含3.

- postix减量运算符在这里没有任何区别。 a.length是3.第二个语句翻译为:

  • 检索数组长度(结果:3)
  • 将结果存储在名为“e”
  • 的变量中
  • 减少数组长度(此步骤对此独立样本的总体结果没有影响)

鉴于:

var a = [1,4,5];
var e = a.length-=1;

这里e 包含2。

第二个陈述翻译为

  • 检索数组长度(结果:3)
  • 减少数组长度(结果:2)
  • 将结果存储在名为“e”
  • 的变量中

无论如何,你正在弄乱你不应该做的array.length财产。它会导致难以追踪的那种令人讨厌的错误,因为它是你可能没有想到或想到的副作用的结果。

答案 4 :(得分:0)

哦,是的,我从书中看到了这一点:第112页的面向对象的Javascript

  
    
      

push()方法在数组末尾附加一个新元素。 pop()方法删除最后一个元素。 a.push('new')就像[a.length] ='new'和a.pop()和a.length一样 - 。

    
  

并且没有尝试我发布问题的代码!!!

对不起。所以我认为这是一个书错误,因为pop()返回最后一个元素 a.length--收缩数组但不返回元素但是数组lenght -1