【问题标题】:Why is my javascript function being printed as undefined? [duplicate]为什么我的 javascript 函数被打印为未定义? [复制]
【发布时间】:2020-06-05 08:17:27
【问题描述】:

我是 JavaScript 新手,目前正在学习函数。 每当我尝试将其打印到控制台时,它都会以未定义的形式返回。我确定它非常简单,但我错过了什么?这是我的代码:

let getSleepHours = day => {
  switch (day) {
    case 'monday':
      return 8;
      break;
    case 'tuesday':
      return 7;
      break;
    case 'wednesday':
      return 6;
      break;
    case 'thursday':
      return 9;
      break;
    case 'friday':
      return 10;
      break;
    case 'saturday':
      return 8;
      break;
    case 'sunday':
      return 11;
      break;
    default:
      return 'error';
  }
}
const getActualSleepHours = () => {
  return
  getSleepHours('monday') +
    getSleepHours('tuesday') +
    getSleepHours('wednesday') +
    getSleepHours('thursday') +
    getSleepHours('friday') +
    getSleepHours('saturday') +
    getSleepHours('sunday');
};
console.log(getActualSleepHours());

【问题讨论】:

  • 因为在你的return后面多了一个新行
  • switch 中,您可以使用returnbreak,但不能同时使用。
  • const getActualSleepHours = () => getSleepHours('monday') + getSleepHours('tuesday') +..... + getSleepHours('sunday');

标签: javascript function


【解决方案1】:

由于这一行,它返回 undefined

const getActualSleepHours=()=>{ return

这里return关键字之后没有返回任何东西,所以Javascript会认为它是未定义的。

你应该这样做:

const getActualSleepHours =() =>{ 
  return getSleepHours('monday')+
  getSleepHours('tuesday')+
  getSleepHours('wednesday')+
  getSleepHours('thursday')+
  getSleepHours('friday')+
  getSleepHours('saturday')+
  getSleepHours('sunday');

};

完整的sn-p:

let getSleepHours = day => {
  switch (day) {
    case 'monday':
      return 8;
      break;
    case 'tuesday':
      return 7;
      break;
    case 'wednesday':
      return 6;
      break;
    case 'thursday':
      return 9;
      break;
    case 'friday':
      return 10;
      break;
    case 'saturday':
      return 8;
      break;
    case 'sunday':
      return 11;
      break;
    default:
      return 'error';
  }
}
const getActualSleepHours =() =>{ 
  return getSleepHours('monday')+
  getSleepHours('tuesday')+
  getSleepHours('wednesday')+
  getSleepHours('thursday')+
  getSleepHours('friday')+
  getSleepHours('saturday')+
  getSleepHours('sunday');

};
console.log(getActualSleepHours());

【讨论】:

    【解决方案2】:

    你有你的答案。只是为了好玩:您的代码可以简化一点。现在是星期四,所以我要睡 9 个小时:P

    // just use an object
    const getSleepHours = {
      monday: 8,
      tuesday: 7,
      wednesday: 6,
      thursday: 9,
      friday: 10,
      saturday: 8,
      sunday: 11
    };
    // and create the string using a template string
    // btw without brackets in the arrow function
    // there's no need for 'return'
    const getActualSleepHours = () =>
      `${getSleepHours.monday} ${
         getSleepHours.tuesday} ${
         getSleepHours.wednesday} ${
         getSleepHours.thursday} ${
         getSleepHours.friday} ${
         getSleepHours.saturday} ${
         getSleepHours.sunday}`;
    
    console.log(getActualSleepHours());
    
    // or, as noted in comments, even easier
    console.log(Object.values(getSleepHours).join(` `)); 
    .as-console-wrapper { top: 0; max-height: 100% !important; }

    【讨论】:

    • const getActualSleepHours = () => Object.values(getSleepHours).join(' ')
    【解决方案3】:

    我知道这不是你的问题,但是当你学习 JS 时,考虑将这个命令式 sn-p 重构为数据结构:

    const getSleepHours = day => {
      const hours = {
        'monday': 8,
        'tuesday': 7,
        'wednesday': 6,
        'thursday': 9,
        'friday': 10,
        'saturday': 8,
        'sunday': 11
       }
       return hours[day] || 'error';
    }
    

    每当您发现自己在编写重复的代码时,这通常表明您的程序中存在您手动创建的数据结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      相关资源
      最近更新 更多