0

下面是一段工作代码。“= true”部分让我感到困惑。这就是我认为正在发生的事情。

1-创建空数组。
2-取选定的列表项(目标)并循环。
3-如果目标列表项的类属性不在数组中,则输入 if 块。
4-添加目标列表项的类属性并将它们添加到数组中。

我的理解是 javascript 使用“push”,而 jquery 使用“add”将项目插入到数组中。下面的代码不使用 push 或 add。

var foo = [];
$($targets).each(function(i) {
    if (!foo[$(this).attr('class')]) {
        foo[$(this).attr('class')] = true;
    }
});
4

2 回答 2

2

代码有缺陷,如果你想使用字符串作为键,你会使用对象而不是数组:

var foo = {};

然后它检查对象中的键是否是假的,尽管您可能希望使用运算符检查严格存在in

$targets.each(function() {
  var klass = this.className; // cache, no need for jQuery
  // if `foo` doesn't have the key `klass` then add it
  if (! (klass in foo)) foo[klass] = true;
});
于 2013-10-03T03:01:44.107 回答
1

除非类名是“1”或“2”之类的数字,否则您不能以这种方式访问​​数组中的项目。也就是说,数组是由对象构建的。因此,例如,您可以执行以下操作:

var foo = ['a', 'b', 'c'];
foo.bar = 'hello';

foo;
//=> ['a', 'b', 'c']

foo[0];
//=> 'a';

foo['bar'];
//=> 'hello';

所以发生的事情是您的脚本没有将这些项目添加到实际数组中。相反,它将它们分配给数组,就好像它是一个常规的 JavaScript 对象一样。

于 2013-10-03T03:02:15.517 回答