【问题标题】:Empty object in JavascriptJavascript中的空对象
【发布时间】:2015-06-16 15:45:51
【问题描述】:

我的情况很奇怪。

我从表单中获取一些值并将其保存在一个对象中。

我打印出这些值,它可以很好地打印到控制台日志。但是当我尝试访问它或在下一行再次打印时。它返回空。

这里是代码。

 var family = {};
    var counter = [];

    counter = document.querySelectorAll(".familyMemberBox input[name='member[]']");

    for(x=0;x<counter.length;x++){
                console.log('for loop');
                family[x] = {};

                member_number = counter[x].value;
                member_type = get_member_type(member_number);
                gender = get_gender(member_number);
                age = get_age(member_number);

                family[x]['type'] = member_type;
                family[x]['Gender'] = gender;
                family[x]['Age'] = age;
    }

    for(x=0;x<counter.length;x++){
        console.log(family[x]);
    }

            console.log('family: '+family[0]);

这是控制台输出

【问题讨论】:

  • console.log(family[x]); 正在记录该对象。 console.log('family: '+family[0]); 正在记录对象的字符串表示,它是(除非你覆盖它)“[object Object]”
  • 这只是控制台格式。试试看:console.log('family: '); console.log(family[0]);
  • 这不是一个空对象,那只是一个对象的字符串。改用console.log("family", family[0])
  • 试试console.log('family: ', family[0]);而不是console.log('family: '+family[0]);
  • 这个可以解释一下:stackoverflow.com/questions/14597246/…

标签: javascript object


【解决方案1】:

您正在使用以下语句将其设为字符串:console.log('family: '+family[0]);

当您将字符串与普通对象连接时,您会隐式调用.toString()。对象的字符串版本是[object Object]。不是空的,不用担心。

如果您要显示对象的 string 版本,您可能需要循环并打印每个键值对,但这可能效率不高。如果您对将family 打印到控制台一无所知,请使用逗号:

console.log('family: ', family[0]); // should show two individual statements, not just one coerced string

【讨论】:

  • 哇,好像是菜鸟的错误。感谢您的详细回答。我将循环使用它。这只是为了测试我是否正确读取了这些值。
【解决方案2】:

这一行:console.log('family: '+family[0]); 在打印前将family[0] 强制转换为字符串。这并不意味着对象是空的。

试试这个:

console.log('family: ');
console.log(family[0]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-12
    • 2019-08-09
    • 2017-02-17
    • 1970-01-01
    • 2016-02-24
    • 2012-01-09
    • 2021-07-09
    相关资源
    最近更新 更多