【问题标题】:ES6 nested array destructuring soft failES6 嵌套数组解构软失败
【发布时间】:2018-11-28 13:33:43
【问题描述】:

ES6中嵌套数组的软失效如何管理?

假设我们有一个包含项目的嵌套数组,我们想要获取第一个项目:

const array = [[3,4,5,6]];
const [[firstItem]] = array; // firstItem = 3

console.log(firstItem);

我想防止数组带有null的情况,但显然它与处理对象软失败的工作方式不同:

const array = [null];
const [[firstItem] = []] = array; // Uncaught TypeError: array is not iterable

console.log(firstItem);

【问题讨论】:

  • 我得到了undefined,正如预期的那样......
  • 这里相同 - 如果我执行 const [[firstItem = []]] = array,我只会得到 TypeError: array is not iterable(将 firstItem 设置为空数组而不是嵌套数组)
  • 对不起,我意识到只有当数组的第一个元素是 null 时它才起作用。更新了我的问题。
  • null 阻止分配使用其默认值。所以它总是会尝试解构null。我不知道这里是否值得使用,但是你可以使用 Proxy 来控制分配;

标签: javascript arrays ecmascript-6 destructuring


【解决方案1】:

您可以通过以下方式确定firstItem 默认情况下始终为空数组(除非您传递null 值):

const array = [];
const [[firstItem = []] = [] ] = array;

console.log(firstItem)

const array = [[1]];
const [[firstItem = []] = [] ] = array;

console.log(firstItem)

【讨论】:

    【解决方案2】:

    来自destructuring assignment

    默认值

    如果从数组中解压缩的值为undefined,则可以为变量分配默认值。

    您的值是 null 而不是 undefined

    const array = [undefined];
    const [[firstItem] = []] = array; // Uncaught TypeError: array is not iterable
    
    console.log(firstItem);

    【讨论】:

      猜你喜欢
      • 2016-10-03
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 2014-08-25
      • 2021-02-05
      • 1970-01-01
      相关资源
      最近更新 更多