【问题标题】:"for..in" in Javascript yields "undefined" valueJavascript 中的“for..in”产生“未定义”值
【发布时间】:2013-07-23 03:34:48
【问题描述】:

我正在开发 Chrome 的扩展程序,我只是想知道“for..in”在 Javascript 中的用法。让我用一个例子来解释一下我发现的问题:

假设我有一个{prop1: "foo", prop2: "bar", ...} 类型的易失性对象。 我想以某种语法将此对象保存在字符串中,例如"prop1=foo;prop2=bar;..."。这是我使用的代码:

var fun = function(data) {
  var str = "";
  for (var i in data) {
    str += i + "=" + data[i] + ";";
  }
  return str;
};
log(fun({x:1, y:2}));

fun 返回以下字符串:undefinedx=1;y=2;

我真的不明白为什么它会遵循这种行为。我知道我可以使用 JSON 来“字符串化”这样的事情,但实际上我只是想了解它为什么会发生。

【问题讨论】:

  • 除了两个语法错误(我猜是拼写错误)代码对我有用。
  • @LightStyle 如果您在fun 的初始化结束时计算缺少的;,则为三个,但分号插入掩盖了那个。 ;)
  • 嗯,这不完全是一个抛出的语法错误:P
  • 正确。我认为这是一个错误,就像我认为意外或草率的全局变量使用错误一样。 (当然解析器不会。)
  • 考虑使用 JSON.stringify() 而不是手动将对象打包成字符串以备后用...

标签: javascript undefined for-in-loop


【解决方案1】:

这是您正在运行的确切代码吗? data[i] 之前缺少的 + 让我相信它不是。看起来很像 str 开始时未初始化,如下所示:

var fun = function(data) {
  var str;
  for (var i in data) {
    str += i + "=" + data[i] + ";";
  }
  return str;
}

【讨论】:

  • 是的,正是这个,我只是修正了原始问题中的错别字。对不起。无论如何,代码对我不起作用,我一直在字符串中得到“未定义”。编辑:引发相同行为的更简单的代码如下:var a = {x:1, y:2}; for(var i in a) { console.log(a[i]); } 它记录 1、2,然后返回 (?) undefined。
  • @LightStyle 哦,好的,谢谢!我认为这是来自 for..in 循环的奇怪行为。
  • 不,别担心,这个简单的例子证实了这一点:function foo() {return "foo";}。在控制台中,输入foo() --> "foo",输入console.log(foo()) --> "foo",然后,换行和未定义。 @JohnKugelman 我指的是 Finalfire 发现的最后一个问题,你的答案是对的;)
  • @LightStyle 啊,我现在关注。评论已删除:)
猜你喜欢
  • 2016-06-19
  • 2011-04-13
  • 2022-01-12
  • 2019-07-29
  • 1970-01-01
  • 2015-09-21
  • 2011-11-06
  • 2019-07-06
相关资源
最近更新 更多