JavaScript不写分号带来的一个问题

2019年11月13日

今天在写一段代码,由于自己写js很少手动加分号,通常会使用prettier自动化格式化,在使用prettier格式化时导致两行代码合并成了一行,从而运行这段代码报错。

有问题的写法

function shuffle(arr) {
  let m = arr.length
  while (m > 1) {
    let index = parseInt(Math.random() * m--)
    [arr[index], arr[m]] = [arr[m], arr[index]]
  }

  return arr;
}

格式化后

function shuffle(arr) {
  let m = arr.length;
  while (m > 1) {
    // 很明显这行代码错误了    
    let index = (parseInt(Math.random() * m--)[(arr[index], arr[m])] = [
      arr[m],
      arr[index]
    ]);
  }

  return arr;
}

解决办法

1、在let index = parseInt(Math.random() * m--)后加上; 2、使用{}包住函数块

function shuffle(arr) {
  let m = arr.length
  while (m > 1) {
    let index = parseInt(Math.random() * m--)
    {
      [arr[index], arr[m]] = [arr[m], arr[index]]
    }
  }

  return arr;
}
0 条评论