javascript - 嵌套条件语句逻辑有错?

标签 javascript

我正在尝试对我的文件上传进行一些验证我正在检查 3 件事

1) 文件提交了吗? 2) 文件类型是否正确? 3) 文件大小小于允许数量

出于某些奇怪的原因,我的嵌套条件语句没有返回我期望的结果。

我希望它是这样的:

如果用户输入一个文件,检查文件类型。如果文件类型通过,则检查文件大小,如果文件大小通过,则将文件提交给服务器。

当我在控制台中测试它时,如果我不提交文件,第一个 if block 通过了,但是当我同时提交正确的文件类型和错误的文件类型时,第二个失败。此外,我检查了文件大小块,但两种情况都失败了。

这是我的代码和我在控制台上的输出。对于文件类型,我已经设置了真实文件类型的状态,以防用户试图欺骗文件。

    async onSubmit(e){
        e.preventDefault();

        console.log(this.state);

        // file size bytes in mb
        var fileCheck = Math.floor(Math.log(this.state.fileSize) / Math.log(1024));

        console.log(fileCheck);

        //Check if a uploaded photo was taken.
        if(this.state.fileObject === ''){
            console.log('no file was submitted');
        } else if(this.state.fileType !== 'image/jpeg' || this.state.fileType !== 'image/jpg' || this.state.fileType != 'image/png'){
            // check file type
            console.log('wrong file type');
        } else if(fileCheck >= 2){
            // check file size
            console.log('file is too big');
        }
        else {
            console.log('passed all file checks');
        }
    }

控制台输出:

enter image description here

最佳答案

此处的第二个测试将始终评估为真:

else if(this.state.fileType !== 'image/jpeg' || this.state.fileType !== 'image/jpg' || this.state.fileType != 'image/png'){

我建议改为检查数组:

const allowedFileTypes = ['image/jpeg', 'image/jpg', 'image/png'];
// ...
else if (!allowedFileTypes.includes(this.state.fileType)) {
  // err, condition failed
}

.includes 是半新的方法,如果您支持古老的浏览器并且不使用 polyfill,请改为针对 indexOf 进行测试:

const allowedFileTypes = ['image/jpeg', 'image/jpg', 'image/png'];
// ...
else if (allowedFileTypes.indexOf(this.state.fileType) === -1) {
  // err, condition failed
}

关于javascript - 嵌套条件语句逻辑有错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50184458/

相关文章:

javascript - 在PHP中验证数据库中的用户名和密码后,如何使按钮转到特定页面

javascript - 如何轻松使用 API 响应,同时向响应添加一些额外的标志?

javascript - 如何在javascript中更改函数中变量的值?

javascript - 尝试将 html 属性设置为 javascript 变量

javascript - 为什么在 DOM 中操作 CSS 时需要先检查 style.element = ''

javascript - 如果使用 css 加载图像,如何防止显示图像替代文本

javascript - 从 API 有条件地设置数组值的样式

javascript - 如何动态添加函数到队列中?

javascript - 编辑和保存不起作用

javascript - 定位对象内的数组 - Angular 2 中的 Observables