3

运行以下命令时出现错误“Uncaught TypeError: Cannot set property 'text' of undefined”

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
];

有什么帮助吗?

4

3 回答 3

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"]它(这意味着“iyears对象中获取具有名称的属性,然后从中获取属性"text")。

请注意,尝试在 JavaScript 中为标准数组预分配空间没有任何好处,因为 JavaScript 标准数组根本不是真正的数组。所以也许:

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});
}
于 2013-04-07T15:11:41.483 回答
1

years[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});
}
于 2013-04-07T15:14:37.407 回答
0

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

var years = [];

for (var i = 0; i < 133; ++i)
{
    years[i] = {
        text: (i + 1900).toString(),
        value: i + 1900
    };
}
于 2013-04-07T15:15:09.367 回答