繁体   English   中英

变量在函数中未定义

[英]Variable is undefined in function

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

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, '');

我不明白这怎么可能是未定义的? 我究竟做错了什么?

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

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

或者你的意思是这样的:

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

这可能是由 1-off 错误引起的。 在最后一个元素评估为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,因为有四个元素。 使用小于或等于运算符允许发生此错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM