3

对不起,这可能是一个简单的,但它让我难住了。我试图遍历这个数组并注销每个值,但脚本正在注销一个字符串对象。

propertiesToSanitize = ["title", "description", "place_name"]
$.each propertiesToSanitize, ->
  console.log this

转换为 jQuery 为

var propertiesToSanitize;
propertiesToSanitize = ["title", "description", "place_name"];
$.each(propertiesToSanitize, function() {
  return console.log(this);
});

正在返回:

String
  0: "t"
  1: "i"
  2: "t"
  3: "l"
  4: "e"
  length: 5

知道为什么它返回这个而不是“标题”或任何其他值吗?提前感谢您的帮助。

4

2 回答 2

8

每次迭代的索引和值作为回调中的参数提供。

$.each(propertiesToSanitize, function(index,value) {
    console.log(index + ':' + value);
});
于 2012-04-29T01:56:09.783 回答
2

原因是因为this在 JavaScript 中非常复杂。回调中的this变量通常会引用您不应该依赖的范围堆栈深处的内容。使用jQueryeach,“即使它是简单的字符串或数字值,Javascript 也会始终将this值包装为Object”,这就是您所看到的。

jQueryeach将值作为第二个参数传递给您的回调。在你的 JavaScript 中,你可能想要这样:

$.each(propertiesToSanitize, function(idx, val) {
  return console.log(idx + ":" + val);
});

但也请注意,CoffeeScript 非常有能力在没有 jQuery 帮助的情况下循环遍历数组:

for propName in propertiesToSanitize
  console.log propName
于 2012-04-29T02:08:33.203 回答