2013-02-27 110 views
1

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; 
    .... 
}); 

結果應該是一個數組看起來像這樣(計數器不工作無利班...):

Array (
    [20] => 14_555 
) 

但結果我得到的是:

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

現在我想告訴你爲什麼「this」爲這個數組創建了第二個維度。

如果把它放進String(this),它的工作。但是在這種情況下,這真的是「這個」的理想結果嗎?

回答

3

我認爲這正是控制檯顯示的內容,它並不意味着你有一個二維數組。不要把你所看到的一切都視爲真相。

您正在分配一個字符串對象而不是字符串原始的和控制檯對待對象作爲陣列狀對象,因爲它有一個.length和數值性質。

這裏是一個字符串對象和一個字符串原始的瀏覽器控制檯打印:

> 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]運行。

+0

'「use strict」'? – Bergi 2013-02-27 14:00:06

+0

已更新。我實際上認爲'this'會變成'undefined',但是這個值只是沒有被轉換成一個對象。 – 2013-02-27 14:12:32