JS为什么我的代码10x的输出未定义?

时间:2019-01-28 20:34:13

标签: javascript

我想将10个不同的对象传递到一个函数(logObjekt)中,以便我可以console.log在所有对象中设置的属性名称。

我不必使用10行代码来实现此目的,而是使用for循环来增加将要传递给函数的每个名称,而是使之成为可能,因为所有对象均以“ objekt”开头。

当我调试此程序时,一切看起来都很好,并且当JS强制将int字符串化并合并两者时,我得到的结果为“ object1,object2 ...依此类推”。因此,乍一看,我以为我有一个很好的解决方案,但是当我实现该解决方案时,我得到了10倍的未定义值,而不是对象中的10个值。

var objekt1  = { "name": "value1" };
var objekt2  = { "name": "value2" };
var objekt3  = { "name": "value3" };
var objekt4  = { "name": "value4" };
var objekt5  = { "name": "value5" };
var objekt6  = { "name": "value6" };
var objekt7  = { "name": "value7" };
var objekt8  = { "name": "value8" };
var objekt9  = { "name": "value9" };
var objekt10 = { "name": "value10" };

var i;
for (i = 0; i < 10; i++) {
  logObjekt("objekt" + i);
};

function logObjekt(objekt) {
  console.log(objekt.name)
};

我希望在称为“名称”的对象中记录属性。

现在实际结果是未定义的10倍。

2 个答案:

答案 0 :(得分:2)

要访问具有变量名的全局变量,您可以可以(但您不应这样做,请参见下面的第一个代码片段)使用方括号语法。

var objekt1 = {
  "name": "value1"
};

var objekt2 = {
  "name": "value2"
};

var objekt3 = {
  "name": "value3"
};

var objekt4 = {
  "name": "value4"
};

var objekt5 = {
  "name": "value5"
};

var objekt6 = {
  "name": "value6"
};

var objekt7 = {
  "name": "value7"
};

var objekt8 = {
  "name": "value8"
};

var objekt9 = {
  "name": "value9"
};

var objekt10 = {
  "name": "value10"
};

var i;
for (i = 1; i < 10; i++) {
  logObjekt(window["objekt" + i]);
};

function logObjekt(objekt) {
  console.log(objekt.name)
};

请注意,我展示此内容只是为了显示在需要时如何做。

绝不是 您这样做的。正如其他人已经提到的,将对象放入数组中:

var objekt = [{
  "name": "value1"
}, {
  "name": "value2"
}, {
  "name": "value3"
}, {
  "name": "value4"
}, {
  "name": "value5"
}, {
  "name": "value6"
}, {
  "name": "value7"
}, {
  "name": "value8"
}, {
  "name": "value9"
}, {
  "name": "value10"
}]

for (var i = 0; i < objekt.length; i++) {
  logObjekt(objekt[i]);
};

function logObjekt(objekt) {
  console.log(objekt.name)
};

答案 1 :(得分:1)

您需要创建一个对象数组并将其推入该数组,以遍历对象并打印出name属性。

var objectlist = [];
objectlist.push({ "name": "value1"});
objectlist.push({ "name": "value2"});

for(var i = 0; i < objectlist.length; i++)
{
   logObjekt(objectlist[i]);
}