jQuery $ .each push(this)无法正常工作

时间:2013-02-27 13:43:59

标签: javascript jquery arrays

Actualy我想创建一个简单的阵列度假。

var preSelected = "13_335 14_555";
var arrayClasses = preSelected.split(' ');
var arrayClassesSorted = new Array();

$.each(arrayClasses, function() {
//var elCount = $("li."+ this).size();
elCount = 20 ...... ;
arrayClassesSorted[elCount] = this;
    ....
});

结果应该是一个如下所示的数组(如果没有li Classes,则计数器不起作用):

Array (
  [20] => 14_555
)

但我得到的结果是:

[20] => Array
    (
        [0] => 1
        [1] => 4
        [2] => _
        [3] => 5
        [4] => 5
        [5] => 5
)

现在我想知道,为什么“这个”为这个数组创造了第二个维度。

如果把它放到String(this)中,它的工作。但在这种情况下,这真的是“这个”的理想结果吗?

1 个答案:

答案 0 :(得分:3)

我认为这正是控制台向您展示的内容,它实际上并不意味着您拥有二维数组。不要把你看到的所有事情当作真理。

您正在分配字符串对象而不是字符串原语,并且控制台将对象视为类似数组的对象,因为它具有.length和数字属性。

以下是Chrome控制台为字符串对象和字符串基元打印的内容:

> console.log(new String('foo'));
  String {0: "f", 1: "o", 2: "o"}
  undefined
> console.log('foo');
  foo
  undefined

您应该始终避免使用字符串对象,因为它们可能会导致意外行为:

> new String('foo') === 'foo'
  false

更好地分配原始值:

$.each(arrayClasses, function(val) {
    //var elCount = $("li."+ this).size();
    elCount = 20 ...... ;
    arrayClassesSorted[elCount] = val;
    ....
});

“字符串对象来自哪里?”你可能会问。

您正在为数组分配this

arrayClassesSorted[elCount] = this;

this将始终是一个对象(原始值转换为对象),除非该函数在strict mode [MDN]中运行。