前端文件大小单位转换的最佳实践

165 阅读2分钟

提高代码优雅度:文件大小单位转换的最佳实践

在日常开发中,我们经常需要将文件大小从 KB 转换为 MB、GB 甚至 TB,以提供更直观的信息展示。

今天,我们就来看看如何优雅地实现这一功能,并推荐一种更简洁高效的代码写法。

传统写法:繁琐的 if-else

function formatSizeUnits(kb) {
    var result'';
    if (kb < 1024) {
        result = kb + ' KB';
    } else if (kb < 1024 * 1024) {
        result = (kb / 1024).toFixed(2) + ' MB';
    } else if (kb < 1024 * 1024 * 1024) {
        result = (kb / 1024 / 1024).toFixed(2) + ' GB';
    } else {
        result = (kb / 1024 / 1024 / 1024).toFixed(2) + ' TB';
    }
    return result;
}

这段代码能够正确地完成任务,但存在明显的问题:

  1. 冗余的 if-else 判断 每种单位都需要写一遍,代码不够简洁。
  2. 可拓展性差 如果以后需要支持 PB(Petabyte**)或者更大的单位,还需要继续添加 if-else。
  3. 重复计算 1024 操作重复出现,影响可读性。

推荐写法:更优雅的 while循环

function formatSizeUnits(kb) {
    let units = ['KB''MB''GB''TB''PB'];
    let unitIndex0;
    
    while (kb >= 1024 && unitIndex < units.length - 1) {
        kb /= 1024;
        unitIndex++;
    }
    
    return `${kb.toFixed(2)} ${units[unitIndex]}`;
}

这段代码的优势:

✅ 结构更清晰 —— while 循环逐级转换单位,逻辑更加直观。

✅ 更易拓展 —— 只需在 units 数组中添加新的单位,无需修改核心逻辑。

✅ 减少冗余计算 —— 避免了多次 if-else 判断,提高可读性。

代码示例:

console.log(formatSizeUnits(500));        // "500.00 KB"
console.log(formatSizeUnits(2048));       // "2.00 MB"
console.log(formatSizeUnits(5 * 1024 ** 3)); // "5.00 TB"

结语

代码不仅要能完成任务,更要追求简洁可读可拓展。通过使用 while 循环,我们不仅减少了代码量,还让逻辑更加清晰,避免了硬编码**的 if-else 结构。希望这篇文章能帮助你在日常开发中写出更优雅的代码!

如果你觉得有用,欢迎 点赞收藏转发

图片