变量在函数中是未定义的

时间:2016-03-14 11:13:37

标签: javascript

我有一个逗号分隔值的字符串:

var newVal = "9103174091,1231231232"
$(ctrl).val(DataReview.Encryption.formatPersonNmbr(newVal));

我用这个值调用一个函数:

function (val) {

        val = val.split(",");
        var newVal = "";
        for (var i = 0; i <= val.length; ++i)
        {
            val[i] = val[i].replace(/ /g, '');
            var newVal = val[i];

            if (val[i].length == 10 || val[i].length == 11 || val[i].length == 12) {
                if (val[i].length == 11) {
                    val[i] = val[i].substring(0, 6) + val[i].substring(7);
                }
                if (val[i].length == 10) {
                    var year = '20' + val[i].substring(0, 2);
                    var month = val[i].substring(2, 4);
                    var day = val[i].substring(4, 6);
                    var date = new Date(year, month - 1, day);

                    if (isNaN(date) == false) {
                        var currentDate = new Date();
                        if (date > currentDate) {
                            val[i] = '19' + val[i];
                        } else {
                            val[i] = '20' + val[i];
                        }
                    }
                }
            }

            newVal += val[i].substring(0, 8) + '-' + val[i].substring(8);   
        }

        return newVal;
    }

当我运行它时,我收到以下错误:

TypeError: val[i] is undefined
val[i] = val[i].replace(/ /g, '');

我无法理解这是如何定义的?有谁可以向我解释我做错了什么?

1 个答案:

答案 0 :(得分:0)

您确定这是for循环的正确结束条件吗?

for (var i = 0; i <= val.length; ++i)

或者你是说这个:

for (var i = 0; i < val.length; ++i)

这可能是由一次性错误引起的。在最后一个元素之后访问元素评估为undefined

实施例

var list = [2, 4, 6, 8];

for (var i = 0; i <= val.length; i++){
  console.log(list[i]);
}

输出

2
4
6
8
undefined

最后一次出现是undefined因为val[4]没有值,所以列表中的值最多只能访问val[3]。它的索引达到4,因为val.length返回4,因为有四个元素。使用小于或等于运算符可以发生此错误。