【问题标题】:Understanding Array Length vs. Property Length?了解数组长度与属性长度?
【发布时间】:2018-10-08 13:10:11
【问题描述】:

我有以下将信息插入数组的代码。对于这个例子,我只插入索引。查看 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);

【问题讨论】:

  • inputs 是哪里或什么,您显示的数组是 types 吗?在if 语句上方添加debugger; 并在浏览器控制台中单步执行代码。
  • 也许一个工作的 jsfiddle 会有所帮助。类型的初始值是多少?
  • Inputs 是输入元素的 html:prntscr.com/jaww0m
  • Note 对象在展开时会更新,日志的第一行除外。因此,您使用的任何代码很可能是在您记录后操作数组,但在您扩展数组之前
  • @Michael 是的,这是您提供的代码和您拥有的代码之间相当重要的区别。

标签: javascript jquery arrays javascript-objects


【解决方案1】:

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 将在您打印出来时显示对象的原样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-22
    • 2011-01-20
    • 2014-10-12
    • 2011-02-13
    • 2016-08-31
    • 2019-12-17
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多