数组.each()循环返回字符串而不是jQuery中的值

时间:2012-04-29 01:55:15

标签: javascript jquery coffeescript

对不起,这可能很容易,但我很难过。我正在尝试遍历此数组并注销每个值,但脚本正在注销一个字符串对象。

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

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

2 个答案:

答案 0 :(得分:8)

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

$.each(propertiesToSanitize, function(index,value) {
    console.log(index + ':' + value);
});

答案 1 :(得分:2)

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

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

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

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

for propName in propertiesToSanitize
  console.log propName