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)中,它的工作。但在这种情况下,这真的是“这个”的理想结果吗?
答案 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]中运行。