语法错误:ES6 Switch case inside if else ternary Operator

时间:2015-12-11 08:55:05

标签: javascript

我的代码出现语法错误,我的webpack编译器将我的错误指向我的三元运算符中的switch case

export function computeShipping(weight, location) {
  return (dispatch, getState) => {
    const state = getState();
    const { shippingMatrix } = state.cart;
    return shippingMatrix != null
      ?  switch(location) {
            case 'provincial':
              if ( weight <= 1) {
                return shippingMatrix.provincial[0].value;
              }
          }
      : null
  }
}

任何人都可以帮助我吗?

建议将不胜感激。 :)

2 个答案:

答案 0 :(得分:3)

编译器是完全正确的。 private IQueryable SearchFilterCondition(string filter,string value) { var filterParam = filterparameter(filter); //evaluate filterparameter outside of the query var emailmessage = from a in db.EmailAflAwmMessage where (filterParam == value) orderby a.msg_date descending select new { a.subject, a.msg_date, }; return emailmessage; } 语句是语句,不能作为期望表达式的三元运算符的操作数出现。

鉴于此,我无法确切地告诉您对此代码的期望,但我想您想要这样简单的switch条件:

if

当然,你可以把它变成三元组:

export function computeShipping(weight, location) {
  return (dispatch, getState) => {
    const {cart: {shippingMatrix}} = getState();
    if (shippingMatrix != null && location === 'provincial' && weight <= 1)
      return shippingMatrix.provincial[0].value;
    else
      return null;
  }
}

甚至可以将条件的静态部分移到闭包之外:

    …
    return (shippingMatrix != null && location === 'provincial' && weight <= 1)
       ? shippingMatrix.provincial[0].value;
       : null;

答案 1 :(得分:0)

您不能在表达式中使用语句(如if / switch / for)(如三元表达式)。您也可以这样说if(switch(..){..})var x = /*expression*/

区分的最简单方法是变量赋值。你可以说var x = for(...),但你不能说CloudAppendBlob appendBlob = container.GetAppendBlobReference("myblob.txt") appendBlob.AppendText("new line"); 。想想那些可以有价值的东西,而不是那些无法实现的东西。