【问题标题】:array length in JSJS中的数组长度
【发布时间】:2010-10-12 04:59:18
【问题描述】:
var a = [1,4,5];
var e = a.length--;

这里e 变量将包含 5。但如果我这样做:

var e = a.length-=1;

这里e 将包含2 个元素数的数组。
那么第一个是模拟pop() 数组方法的语言“提示”?

在语言语法中:

a--

a-=1

在语义上是相同的。

【问题讨论】:

  • 你帖子里的问题在哪里?
  • 那么第一个是语言'tip'来模拟一个pop()数组方法?

标签: javascript arrays


【解决方案1】:

哦,是的,我是从书中读到的:Object Oriented Javascript at page 112

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

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

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

【讨论】:

    【解决方案2】:
    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;
    

    这里 包含 2。

    第二个语句翻译为

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

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

    【讨论】:

      【解决方案3】:
      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)返回递减后的值。所有这些代码 sn-ps 从数组 a 中弹出最后一个元素。

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

      【讨论】:

        【解决方案4】:

        这不是我得到的。

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

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

        在第二种情况下,从 3 中减去 1 得到 2,然后将其分配给 e。

        所以我不认为有什么特别的事情发生,真的。

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-10-25
            • 2017-08-04
            • 2019-11-10
            • 2017-01-26
            • 1970-01-01
            • 2016-12-18
            相关资源
            最近更新 更多