当我在switch语句中使用break时,出现了无法访问的代码错误。

5

我想知道我在代码中做错了什么。我正在尝试以下操作:

switch (action.type) {
    case TYPES.ADD_TO_FAVORITES:
      if (state.faves.length <= 10) {
        return assign({}, state, {
          faves: state.faves.concat(action.payload),
          full: false
        });
      } else {
        return assign({}, state, {
          faves: state.faves,
          full: true
        });
      }
    default:
      return state;
  }

我的代码检查工具建议在 default 分支之前添加一个 break,但是当我这样做时,它会提示 unreachable code


不要从 switch 语句中返回。 - user4639281
@TinyGiant 为什么不呢? - 1252748
3个回答

6
在 eslint 中,linter 规则 'no-fallthrough' 的作用是不允许从一个 case 意外地穿透到下一个 case。
也就是说,如果没有使用 break、return 等语句,会一直执行到匹配的 case,并继续执行下一个 case。有时候我们确实需要这么做,但是意外的穿透很容易发生,这个规则旨在防止这种情况发生。
你可以禁用这个规则,或将其配置为警告。我建议在函数末尾为返回值分配一个变量,并返回该变量,而不是禁用规则。
function() {
var returnvalue;
Switch(variableA) {
    Case 1:
        returnvalue = somevalue;
        break;
    case 2:
        returnvalue = some other value;
        break;
     default:
         returnvalue= default value;
    }
return returnvalue; 

对于无法到达的代码部分,你正在从if else块中返回。

因此,break语句永远不会有机会执行。


0
switch (action.type) {
case TYPES.ADD_TO_FAVORITES:
  if (state.faves.length <= 10) {
    return ...;
  } else {
    return ...;
  }
  break; // YOU HAVE ADDED BREAK HERE
default:
  return state;
}

TYPES.ADD_TO_FAVORITES 的情况下,将执行 ifelse 中的一个。由于在 if 和 else 中都返回了一些对象,因此您在 default 之前添加的 break 将永远不会被执行!

这就是为什么它说 unreachable code


-4
在 switch 语句中使用 return 没有意义且不被允许。你只能在函数中使用 return。如果你想从 switch 语句中返回值,只需将其赋值给一个变量,如下所示:
var result;
switch (action.type) {
    case TYPES.ADD_TO_FAVORITES:
        if (state.faves.length <= 10) {
            result = assign({}, state, {
                faves: state.faves.concat(action.payload),
                full: false
            });
        } else {
            result = assign({}, state, {
                faves: state.faves,
                full: true
            });
        }
        break;
    default:
        result = state;
        break;
}

1
我正在学习Redux,他们在switch语句中使用了return :( 这里有一个例子:http://onehungrymind.com/build-better-angular-2-application-redux-ngrx/ - user6701863
我不知道什么是redux。但是根据你提供的所有关于原生JavaScript的信息,我只能给出这个答案。 - KmasterYC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接