这段代码出了什么问题

时间:2011-01-31 16:27:08

标签: javascript

if   ((prmotionCode != 'FSSAVE') || (promotionCode != 'ISSAVE') && (promotioCode == 'SOSAVE'))

11 个答案:

答案 0 :(得分:12)

你拼错了promotionCode错误2次中有3次。

编辑:使用像Firebug这样的Javascript调试器可以让您跟踪代码并更好地了解问题发生的位置和内容。您可能还想尝试使用Javascript支持的IDE,因为可能能够检测到此类问题。

答案 1 :(得分:2)

你在if的第一和第三部分错误拼写了'prmotionCode'。 除此之外,没有足够的信息来回答这个问题。

答案 2 :(得分:2)

(promotioCode == 'SOSAVE')

应该是

(promotionCode == 'SOSAVE')

您可能希望将来提供更多信息。

这是if语句中的最后一个条件

修改

等等,你拼错了两次。

答案 3 :(得分:2)

在||的使用之间不使用括号和&&,使你的目的不明确(没有必要,但强烈反对..)

答案 4 :(得分:2)

首先,您似乎在拼写“促销”时遇到了一些问题。

但更重要的是,它确实没有逻辑意义。如果promotionCode =“SOSAVE”,那么根据定义,它不等于任何其他东西。没有理由测试代码是否等于一个东西,同时又不等于另一个东西;这是多余的。

据推测,你需要告诉我们你在这里想要做什么。

答案 5 :(得分:1)

你错过了第一个prmotioncode中的o?

答案 6 :(得分:1)

你可能想要两个&&amp ;.第三个变量应该是promotionCode。 'n'缺失

答案 7 :(得分:1)

如果拼写错误刚出现在您的SO帖子中,那么可能是您在询问布尔逻辑 - 问题是precedence。你的逻辑归结为4套:

  1. FSSAVE
  2. ISSAVE
  3. SOSAVE
  4. {all others}
  5. 很难确切地说出你想要什么,生产,但你的逻辑说:如果它属于SOSAVE(包括#3)或它不在集FSSAVE(排除#1)然后做一些事情...归结为:如果在#2,#3,#4 - 做某事,这(再次)归结为:如果不在#1 - 做某事。由于运算符优先级,忽略ISSAVE子句。

    您的专栏可以重写为:

    //Using pc as prmotionCode/promotionCode/promotioCode
    if (pc!='FSSAVE') {
      //Do something
    }
    

答案 8 :(得分:1)

即使没有拼写错误,也可以将条件减少为

if(promotionCode != 'FSSAVE')

什么是重点?

答案 9 :(得分:0)

您是否真的知道javascript中的operator precedence

如果没有,那么你必须总是在带有多个测试的表达式周围放置括号,以使自己和代码维护者清楚地知道你期望的优先级。

知道&&||更紧密吗?

答案 10 :(得分:0)

除了明显的错误和讽刺之外,这里有一点编码帮助。尝试使用switch而不是if块:

switch (promotionCode) {
    case 'FSSAVE':
        // code for FSSAVE here.
        break;
    case 'ISSAVE':
        // code for ISSAVE here.
        break;
    case 'SOSAVE':
        // code for SOSAVE here.
        break;
    default:
        // code for none of the above here.
        break;
}

这将允许您将来添加更多条件。没有重组您的代码。您所要做的就是添加更多案例。顺便说一句,它会以这种方式稍微评估一下,因为promotionCode变量只被评估一次。

P.S。此外,您只需要尝试拼写promotionCode一次。误差较小。 (对不起,忍不住!快乐的编码!)