未捕获的TypeError:无法设置未定义的属性“text”

时间:2013-04-07 15:09:34

标签: javascript jquery

我收到错误“Uncaught TypeError:在运行以下内容时无法设置未定义的属性'text'

var years= new Array(113);
for(i=0;i<113;i++){
years[i]["text"]=i+1900;
years[i]["value"]=i+1900;
}

基本上,我希望用循环生成这样的东西

var years= [
        { text: "1990", value: 1990, },
        { text: "1991", value: 1991, }, //till 2012
];

任何帮助?

3 个答案:

答案 0 :(得分:6)

你想要文字符号:

var years= new Array(113);
for(i=0;i<113;i++){
    years[i] = {text: String(i + 1900), value: i + 1900};
}

您收到错误的原因是您从未向years[i]分配任何内容,但您试图在表达式years[i]["text"]中使用(这意味着&# 34;从i对象获取名称来自years的属性,然后从中获取属性"text"

请注意,尝试在JavaScript中为标准数组预分配空间没有任何好处,因为JavaScript标准数组aren't really arrays at all。所以也许:

var years= [];
for(i=0;i<113;i++){
    years[i] = {text: String(i + 1900), value: i + 1900};
}

同样,你可以从1900(包括)循环到2013(不包括),而不是在循环中完成所有这些添加:

var years= [];
for(i=1900;i<2013;i++){
    years.push({text: String(i), value: i});
}

答案 1 :(得分:1)

年[i]未设置为任何内容(years[i] == undefined),因此您无法访问该文本。尝试使用以下内容:

var years = new Array(113);
for(i=0; i < 113; i++) {
    years[i] = {"text": i+1900, "value": i+1900};
}

var years = new Array();
for(i=0; i < 113; i++) {
    years.push({"text": i+1900, "value": i+1900});
}

答案 2 :(得分:0)

您的问题已经得到解答,但我建议使用数组文字符号而不是显式构造函数调用。

var years = [];

for (var i = 0; i < 133; ++i)
{
    years[i] = {
        text: (i + 1900).toString(),
        value: i + 1900
    };
}