JS Switch语句被忽略

JS Switch statement is ignored

fileType = document.getElementById('file-type-select');

fileType.addEventListener('change', function() {
  setFileName(this.value);
});

setFileName();

function setFileName(fileType = 0) {
  file = (function() {
    let name = new Date().toISOString().slice(0, 19).replace(/-/g, "");

    switch (fileType) {
      case 1:
        name += '.txt';
        break;
      case 2:
        name += '.md';
        break;
      case 3:
        name += '.html';
        break;
      default:
        name += '.txt';
    }

    return {
      'name': name,
    }
  })();

  console.log(file.name);
}
<select id="file-type-select" name="file-type">
  <option value="1">Plain text</option>
  <option value="2">Markdown</option>
  <option value="3">HTML source</option>
</select>

如您所见,在 setFileName 函数中,switch 语句始终使用默认值并且 file.name 始终以 .txt

结尾

这是为什么?我猜是在参数范围内的东西,但不能告诉

setFileName函数中,函数参数fileTypestring值,不是number值。

并且在 switch 命令上,您已经完成了与数字值的比较,应该将其更改为与 string 值进行比较,如下所示,它将起作用。

fileType = document.getElementById('file-type-select');

fileType.addEventListener('change', function() {
  setFileName(this.value);
});

setFileName();

function setFileName(fileType = 0) {
  file = (function() {
    let name = new Date().toISOString().slice(0, 19).replace(/-/g, "");

    switch (fileType) {
      case '1':
        name += '.txt';
        break;
      case '2':
        name += '.md';
        break;
      case '3':
        name += '.html';
        break;
      default:
        name += '.txt';
    }

    return {
      'name': name,
    }
  })();

  console.log(file.name);
}
<select id="file-type-select" name="file-type">
  <option value="1">Plain text</option>
  <option value="2">Markdown</option>
  <option value="3">HTML source</option>
</select>