【问题标题】:Why does [5,6,8,7][1,2] = 8 in JavaScript?为什么 [5,6,8,7][1,2] = 8 在 JavaScript 中?
【发布时间】:2011-11-17 06:32:54
【问题描述】:

我无法理解这个怪癖。

[1,2,3,4,5,6][1,2,3]; // 4
[1,2,3,4,5,6][1,2]; // 3

我知道[1,2,3] + [1,2] = "1,2,31,2",但找不到正在执行的类型或操作。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    因为(1,2) == 2。您偶然发现了comma operator(或simpler explanation here)。

    除非逗号出现在声明列表、参数列表、对象或数组字面量中,否则它们的行为与任何其他二元运算符一样。 x, y 评估 x,然后评估 y 并得出结果。

    【讨论】:

      【解决方案2】:
      [1,2,3,4,5,6][1,2,3];
            ^         ^
            |         |
          array       + — array subscript access operation,
                          where index is `1,2,3`,
                          which is an expression that evaluates to `3`.
      

      第二个[...]不能是数组,所以是数组下标操作。并且下标操作的内容不是一个分隔的操作数列表,而是一个表达式。

      阅读有关逗号运算符here 的更多信息。

      【讨论】:

      • 正确.. 使用的最后一个索引.. 更多示例:[1,2,3,4,5,6][1,2,3] === [1,2,3,4 ,5,6][3]; [1,1,1,5,1,1][3] === [1,1,1,5,1,1][1,2,3];这样 [1,1,1,5,1,1][3] == 5
      【解决方案3】:
      [1,2,3,4,5,6][1,2,3];
      

      这里的第二个框,即[1,2,3] 变为[3],即最后一个项目,因此结果将为 4 例如,如果您将[1,2,3,4,5,6] 保留在一个数组中

      var arr=[1,2,3,4,5,6];
      
      arr[3]; // as [1,2,3] in the place of index is equal to [3]
      

      类似

      *var arr2=[1,2,3,4,5,6];
      
       // arr[1,2] or arr[2] will give 3*
      

      但是当你在两者之间放置一个 + 运算符时,第二个方括号不用于提及索引。它是另一个数组 这就是你得到的原因

      [1,2,3] + [1,2] = 1,2,31,2
      

      var arr_1=[1,2,3];
      
      var arr_2=[1,2];
      
      arr_1 + arr_2; // i.e.  1,2,31,2
      

      基本上在第一种情况下,它用作数组的索引,而在第二种情况下,它本身就是一个数组。

      【讨论】:

        猜你喜欢
        • 2016-05-19
        • 2011-10-30
        • 1970-01-01
        • 2013-07-25
        • 2015-08-01
        • 2017-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多