Понимание длины массива и длины свойства? - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть следующий код, который вставляет информацию в массив. Для этого примера я вставляю только индекс. Глядя на консоль Chrome, я вижу, что длина массива правильная (11) [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]. Однако, когда я расширяю массив, появляется дублирующаяся информация, и он говорит, что длина равна 34? Я вижу следующее:

       (11) [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
        0: 6
        1: 7
        2: 8
        3: 9
        4: 10
        5: 11
        6: 12
        7: 13
        8: 14
        9: 15
        10: 16
        11: 6 // seems to repeat itself?
        12: 7
        13: 8
        14: 9
        15: 10
        16: 11
        17: 12
        18: 13
        19: 14
        20: 15
        21: 16
        22: 6
        23: 7
        24: 8
        25: 9
        26: 10
        27: 11
        28: 12
        29: 13
        30: 14
        31: 15
        32: 16
        33: 17 // where is this 17 coming from?
        length: 34

Кто-нибудь знает, почему я вижу длину 34 при расширении?

Код:

var html = $($(xml).find("filters").html()).find("li");
var inputs = $(html).find("input");

var types = [];
inputs.each(function(index) {
    if ($(this).prop("id").indexOf("filter-types") >= 0)
    {
        types.push(index);
    }
});
console.log(types);

1 Ответ

0 голосов
/ 27 апреля 2018

console.log покажет зарегистрированный объект таким, какой он есть сейчас, поэтому при его развертывании он может отличаться от отображаемого предварительного просмотра.

При запуске следующего в консоли

var arr = [1,2,3];
console.log("different when you expand",arr);
console.table(arr);
setTimeout(()=>{
  Array.from(new Array(100),()=>0).forEach(()=>arr.push(arr.length))
},10);

Он покажет: different when you expand (3) [1, 2, 3], но когда вы развернете его, вы увидите, что массив больше не имеет длины 3 и больше значений 1,2,3.

Console.table покажет объект таким, какой он есть, когда вы его распечатываете.

...