原生JavaScript检查文件扩展名是否在数组中出错求助
问题分析与解决
核心错误:你定义允许的文件类型时用了
('pdf','doc','docx'),这是逗号表达式,最终filetypes的值是最后一个字符串'docx',而非数组。当你在字符串上调用indexOf(),只要扩展名是该字符串的子串就会返回非负位置,比如扩展名是'x'也会返回2,导致判断逻辑完全失效。修正步骤:
- 将
filetypes改为数组格式,用方括号[]包裹元素 - 可选补充:将扩展名转为小写,避免大小写不匹配的问题(比如用户上传
PDF或Docx格式文件)
- 将
修正后的完整代码:
const actualBtn = document.getElementById('userfile'); const fileChosen = document.getElementById('file-chosen'); // 修正为数组 const filetypes = ['pdf','doc','docx']; actualBtn.addEventListener('change', function(){ fileChosen.textContent = this.files[0].name; let fileName = this.files[0].name; let extension = fileName.split(".").pop(); // 统一转为小写,兼容大小写不同的扩展名 extension = extension.toLowerCase(); if(filetypes.indexOf(extension) < 0) { console.log(`不支持的文件格式:${extension}`); } else { console.log(`文件格式合法:${extension}`); } });
额外细节说明:如果用户上传的文件名没有扩展名(比如直接叫readme),split(".")后pop()得到的是文件名本身,这时候会被判定为不支持,符合预期。
内容的提问来源于stack exchange,提问作者KingLouie
相关产品推荐
相关产品推荐

