获取错误(if语句中已定义的变量)

时间:2014-05-07 15:53:54

标签: javascript error-handling

我在JSlint和JSFiddle中遇到错误,但脚本运行完美。

我想修复错误,但我真的不知道该怎么做。

我得到的错误是:' allmonth已经定义'

javascript(它只是完整脚本的一部分,但这里是错误的部分)

$.each(data.product.variants, function (index, variant) {
     var oldvartitle2 = variant.title,
         oldvartitle = oldvartitle2.substring(oldvartitle2.indexOf(":") + 1),
         newvartitle = oldvartitle.substr(3),
         splitted = newvartitle.split(' '),
         month2 = splitted[1];
     if (month2 === 'januari') {
         var allmonth = '01';

     }
     if (month2 === 'februari') {
         var allmonth = '02';

     }
     if (month2 === 'maart') {
         var allmonth = '03';

     }
     if (month2 === 'april') {
         var allmonth = '04';

     }
     if (month2 === 'mei') {
         var allmonth = '05';

     }
     if (month2 === 'juni') {
         var allmonth = '06';

     }
     if (month2 === 'juli') {
         var allmonth = '07';

     }
     if (month2 === 'augustus') {
         var allmonth = '08';

     }
     if (month2 === 'september') {
         var allmonth = '09';

     }
     if (month2 === 'oktober') {
         var allmonth = '10';

     }
     if (month2 === 'november') {
         var allmonth = '11';

     }
     if (month2 === 'december') {
         var allmonth = '12';

     }
     var allmonths = splitted[0] + '/' + allmonth + '/' + splitted[2];
     $('.multiple_' + index2 + '_variants .datacursusul_' + index2 + '_ul').append('<li class="' + allmonths + '">' + oldvartitle + '</li>');
 });

我想改变“allmonth”&#39;变量到一个数字取决于month2变量包含的内容。

谢谢!

5 个答案:

答案 0 :(得分:2)

您必须将代码块开头的所有内存声明为jslint兼容。所以var allmonth;应该在一开始就成为var的一部分。像这样

 var oldvartitle2 = variant.title,
     oldvartitle = oldvartitle2.substring(oldvartitle2.indexOf(":") + 1),
     newvartitle = oldvartitle.substr(3),
     splitted = newvartitle.split(' '),
     month2 = splitted[1],
     allmonth;

您还必须从其他allmonth变量中删除var。

allmonths类似。

答案 1 :(得分:1)

 var allmonth = '';
 if (month2 === 'januari') {
          allmonth = '01';

 }

答案 2 :(得分:1)

有更简洁的方法来做这样的事情。一种是用“switch”语句替换那一系列的“if”语句。但我这样做的方式是这样的:

var month_names = ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'];
var month_index = month_names.indexOf(month2) + 1;
var allmonth = ("0" + month_index).substr(-2);

请注意,如果未找到匹配项,则allmonth将为“00”。

(编辑返回零填充的两位数字符串。)

答案 3 :(得分:1)

如上所述,这可能是未公开的。但是,您可以轻松地重构代码:

var data = {
    product: {
        variants: ['maart']
    }
}

$.each(data.product.variants, function (index, variant) {
    function pad(number) {
        return number < 10 ? '0' + number : number;
    } 
    var month2 = variant,
    months_order = ['januari', 'februari', 'maart', 'etc'],
    allmonth = pad(months_order.indexOf(month2) + 1);
    console.log(allmonth); // 03

});

Fiddle

答案 4 :(得分:0)

您可以使用数组来存储月份名称,然后只需使用indexOf获取索引,并在适用的情况下将其填充为零。

var monthList = ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'];

var month2 = 'maart';

function getMonth(month) {
  var num = monthList.indexOf(month) + 1;
  if (num === 0) return null;
  return num.toString().length === 1 ? '0' + num : num;
}

console.log(getMonth(month2)); // 03

Demo