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

时间:2021-04-09 14:21:15

标签: javascript switch-statement quasar-framework

对于这个开关功能:

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,应该返回7。但是,它总是返回9。如果我console.log(Screen.xs && dist >= 40)结果是true,但它从不选择在这种情况下,它总是返回默认值。

1 个答案:

答案 0 :(得分:1)

不要将 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());