【问题标题】:Spread syntax doesn't work to destructive an array扩展语法不能破坏数组
【发布时间】:2018-08-13 05:14:36
【问题描述】:

我是 Javascript 新手,很困惑为什么以下内容不起作用?

var array = [1, 2, 3, 4]
var spread = ...array;

我原以为它会变成1, 2, 3, 4。相反,它给出了错误消息Unexpected token ...。谁能给我解释一下?

非常感谢!

【问题讨论】:

    标签: javascript rest ecmascript-6 spread-syntax


    【解决方案1】:

    spread的使用语法是:

    对于函数调用:

    myFunction(...iterableObj);
    

    对于数组字面量或字符串:

    [...iterableObj, '4', 'five', 6];
    

    对于对象文字(ECMAScript 2018 中的新功能):

    let objClone = { ...obj };
    

    因此,根据语法,对于使用spread 的数组,您缺少方括号[]

    var array = [1, 2, 3, 4]
    var spread = [...array];
    console.log(spread);

    【讨论】:

      【解决方案2】:

      这是正确的方法,但是这样做没有任何收获。

      var array = [1, 2, 3, 4]
      var spread = [...array];
      console.log(spread);

      如果你真的想解构那个数组,你需要解构赋值

      var array = [1, 2, 3, 4]
      var [one, two, three, four] = array;
      
      console.log(one, two, three, four);

      【讨论】:

      • 感谢 Ele,所以我们不能简单地使用 ... 来传播数组文字吗?
      • @geekydude703 不,我们不能。我们需要用[] 来包装我们的对象,或者用{} 来包装键值对对象。唯一“不必要”的地方是例如:[1, ...array, 3, 4] 看起来你不需要括号,因为扩展语法没有被它们包围,但是,该数组以及其他对象在 [ ] 之间。
      【解决方案3】:

      做你想做的事情的正确方法是:

      var array = [1, 2, 3, 4]
      var spread = [...array];
      

      【讨论】:

      • 谢谢卢卡斯。我有点困惑我们什么时候需要[]..在MDN中,他们有以下示例,其中在破坏数组时没有括号:var parts = ['shoulders', 'knees'];var lyrics = ['head', ...parts, 'and', 'toes'];//["head", "shoulders", "knees", "and", "toes"]
      • 你需要 [] 因为你正在将一个数组解构为一个新数组。在该示例中,您正在创建一个 parts 数组,然后创建另一个 lyrics 数组,其中包含 'head' 和内部的另一个数组(parts 数组),但您使用的是 Rest 参数而不是 var lyrics = ['head', parts]表示您希望将这些部分解压缩为不同的变量。 var lyrics = ['head', ...parts, 'and', 'toes']我希望我帮助了你,而不是让它变得更加混乱。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
      • 据我所知,其余参数 (...) 只能作为函数中的参数。在所有其他情况下,它们应该是扩展语法。我引用的示例来自 MDN 传播语法文档。我很感谢你的帮助
      • 是的,在那种情况下,我相信传播运算符是我正在寻找的名称,感谢您指出这一点。在此处查看@Manishz90 的答案:stackoverflow.com/questions/33898512/…。帮助我了解了三点语法的不同用例。
      猜你喜欢
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 2011-06-23
      • 2021-12-27
      相关资源
      最近更新 更多