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

Javascript 获取错误(已在if语句中定义变量),javascript,error-handling,Javascript,Error Handling,我在JSlint和JSFiddle中遇到了错误,但是脚本工作得非常好 我想修正错误,但我真的不知道该怎么办 我得到的错误是:“allmonth已定义” javascript(它只是完整脚本的一部分,但这里是有错误的部分) $。每个(数据.product.variants,函数(索引,变量){ var oldvartile2=variant.title, OldVartTitle=OldVartTitle2.子字符串(OldVartTitle2.indexOf(“:”)+1), newvartit

我在JSlint和JSFiddle中遇到了错误,但是脚本工作得非常好

我想修正错误,但我真的不知道该怎么办

我得到的错误是:“allmonth已定义”

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

$。每个(数据.product.variants,函数(索引,变量){
var oldvartile2=variant.title,
OldVartTitle=OldVartTitle2.子字符串(OldVartTitle2.indexOf(“:”)+1),
newvartitle=oldvartitle.substr(3),
拆分=newvartitle.split(“”),
month2=分裂的[1];
如果(month2==‘一月’){
var allmonth='01';
}
如果(month2=='februari'){
var allmonth='02';
}
如果(month2=='maart'){
var allmonth='03';
}
如果(month2=='april'){
var allmonth='04';
}
如果(month2=='mei'){
var allmonth='05';
}
如果(month2==='juni'){
var allmonth='06';
}
如果(month2==='juli'){
var allmonth='07';
}
如果(month2==='augustus'){
var allmonth='08';
}
如果(month2==‘9月’){
var allmonth='09';
}
如果(month2==='oktober'){
var allmonth='10';
}
如果(month2==‘11月’){
var allmonth='11';
}
如果(month2=='december'){
var allmonth='12';
}
var allmonths=splitted[0]+'/'+allmonth+'/'+splitted[2];
$('.multiple_'+index2+'\u variants.datacursusul_'+index2+'\u ul')。append('
  • “+oldvartitle+”
  • ); });
    我想根据month2变量包含的内容将“allmonth”变量更改为数字


    谢谢

    必须将代码块开头的所有内存声明为jslint兼容。So
    var全月在一开始就应该是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

    ,必须将代码块开头的所有内存声明为符合jslint的。So
    var全月在一开始就应该是var的一部分。像这样

     var oldvartitle2 = variant.title,
         oldvartitle = oldvartitle2.substring(oldvartitle2.indexOf(":") + 1),
         newvartitle = oldvartitle.substr(3),
         splitted = newvartitle.split(' '),
         month2 = splitted[1],
         allmonth;
    
     var allmonth = '';
     if (month2 === 'januari') {
              allmonth = '01';
    
     }
    
    您还必须从其他
    allmonth
    变量中删除var


    类似地,对于
    allmonths

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

     var allmonth = '';
     if (month2 === 'januari') {
              allmonth = '01';
    
     }
    
    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”


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

    有很多更简洁的方法来做类似的事情。一种是用“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”


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

    您可以使用数组存储月份名称,然后只需使用
    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
    

    您可以使用一个数组来存储月份名称,然后只需使用
    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
    

    如上所述,可能整个月都没有申报。不过,您可以稍微重构代码:

    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
    
    });
    
    var数据={
    产品:{
    变体:['maart']
    }
    }
    $.each(data.product.variants,函数(索引,变量){
    功能板(数字){
    返回编号<10?'0'+编号:编号;
    } 
    var month2=变量,
    月份顺序=[“一月”、“二月”、“马尔特”、“等”],
    allmonth=pad(月\订单指数(month2)+1);
    console.log(所有月份);//03
    });
    

    如上所述,可能整个月都没有申报。不过,您可以稍微重构代码:

    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
    
    });
    
    var数据={
    产品:{
    变体:['maart']
    }
    }
    $.each(data.product.variants,函数(索引,变量){
    功能板(数字){
    返回编号<10?'0'+编号:编号;
    } 
    var month2=变量,
    月份顺序=[“一月”、“二月”、“马尔特”、“等”],
    allmonth=pad(月\订单指数(month2)+1);
    console.log(所有月份);//03
    });
    

    每月申报
    var
    位于作用域的顶部,然后对所有分配使用
    allmonth='01'
    &tc。使用switch语句或object也正打算建议这样做。您应该真正考虑在这里使用一个Switt语句,同时在范围的顶部声明ALLWORE。或者数据字典/Objut.Actudio<代码> var A月;code>位于作用域的顶部,然后对所有分配使用
    allmonth='01'
    &tc。使用switch语句或object也正打算建议这样做。您应该真正考虑在这里使用一个Switter语句以及在范围的顶部声明ALLWORE。或者数据字典/对象。