JavaScript Switch 语句没有返回正确的值

JavaScript Switch statement is not returning the correct value

对于这个开关函数:

import { Screen } from 'quasar'

export const setZoomLevel = (distance) => {
  const dist = parseInt(distance)
  switch (Screen) {
    case Screen.lg && dist >= 50:
    case Screen.md && dist >= 25:
    case Screen.sm && dist >= 10 && dist <= 20:
    case Screen.xs && dist >= 10 && dist <= 30: return 8
    case Screen.sm && dist >= 25:
    case Screen.xs && dist >= 40: return 7
    default: return 9
  }
}

如果屏幕特别小 (xs) 并且距离是 50,它应该 return 7. 但是,它总是 returns 9. 如果我 console.log(Screen.xs && dist >= 40) 结果是 true,但它从不选择那种情况,它总是 return 是默认值。

与其将 Screen 与布尔值进行比较,这会导致您出现意想不到的结果,您应该使用 switch(true) 而不是

来比较 true 与 true

const dist = 50;
const Screen = { xs: true };

const f = () => {
  console.log(Screen.xs && dist >= 40);
  switch (true) {
    case Screen.lg && dist >= 50:
    case Screen.md && dist >= 25:
    case Screen.sm && dist >= 10 && dist <= 20:
    case Screen.xs && dist >= 10 && dist <= 30:
      return 8;
    case Screen.sm && dist >= 25:
    case Screen.xs && dist >= 40:
      return 7;
    default:
      return 9;
  }
};

console.log(f());