Javascript中.length背后的概念

Javascript中.length背后的概念,javascript,Javascript,阵列的大小是4,为什么不是5?这与.push方法有关吗 var box = []; box.push({ "cat": "kitten" }) box.push("a string"); box.push(111); //comment var boxObject = {} boxObject["material"] = "cardboard"; boxObject["dimensions"] = { "height": 2, "width": 60 } //comment box

阵列的大小是4,为什么不是5?这与.push方法有关吗

var box = [];
box.push({
  "cat": "kitten"
})
box.push("a string");
box.push(111); //comment 
var boxObject = {}
boxObject["material"] = "cardboard";
boxObject["dimensions"] = {
  "height": 2,
  "width": 60
} //comment
boxObject["array property Inside object"] = ["U2", "REM"];
boxObject.area = function() {
  return box.dimensions.height * box.dimensions.width;
}

box.push(boxObject); //comment
box["myitem"] = "cat";
console.log(`size of array is ${box.length}`);
for (var item in box) {
  console.log(`type:${typeof box[item]} and value:`,
    box[item]);
}
console.log(`size of array is ${box.length}`);
for (var item2 in box) { // prints 5 properties
  console.log(item2)
}

我期望。长度为5,但返回4。这与.push方法有关吗?

预期值为4而不是5。详细描述了发生这种情况的原因:

var box = [];
box.push({
  "cat": "kitten"
})
box.push("a string");
box.push(111); //comment 
var boxObject = {}
boxObject["material"] = "cardboard";
boxObject["dimensions"] = {
  "height": 2,
  "width": 60
} //comment
boxObject["array property Inside object"] = ["U2", "REM"];
boxObject.area = function() {
  return box.dimensions.height * box.dimensions.width;
}

box.push(boxObject); //comment
box["myitem"] = "cat";
console.log(`size of array is ${box.length}`);
for (var item in box) {
  console.log(`type:${typeof box[item]} and value:`,
    box[item]);
}
console.log(`size of array is ${box.length}`);
for (var item2 in box) { // prints 5 properties
  console.log(item2)
}
在JavaScript数组上设置属性时,当属性为 有效数组索引,且该索引超出 数组,引擎将相应地更新数组的长度属性

数组的.length将只计算数字键。尽管框[myitem]=cat;确实会将名为myitem的属性添加到长方体数组中,该键不是数字,因此尽管在使用in遍历属性名称时会显示该键,但它不会包含在长度中

您只调用了。按4次,因此结果的长度仅为4

例如,如果指定给数值属性而不是myitem,如果指定给属性4,则确实会看到长度发生变化。

box[myitem]=cat;正在设置长方体上的属性。使用长度可以获得数字键

var-box=[]; 推箱子{ 猫:小猫 } box.pusha字符串; 方框111//议论 var-boxObject={} boxObject[材料]=硬纸板; boxObject[尺寸]={ 身高:2, 宽度:60 }//注释 boxObject[对象内部的数组属性]=[U2,REM]; boxObject.area=函数{ 返回框。尺寸。高度*框。尺寸。宽度; } box.pushboxObject//议论 框[myitem]=类别; 控制台日志箱 log`数组的大小为${box.length}`; 对于框中的var项目{ console.log`type:${typeof box[item]}和value:`, 方框[项目]; } log`数组的大小为${box.length}`; 对于框{//中的var item2,打印5个属性 console.logitem2
}这是一个非常不清楚的问题。当我执行box[myitem]=cat时会发生什么?最后一次迭代打印5个items4索引和1个属性name@MaheerAli感谢mate的反馈。只要阅读代码,您就会理解。因此,没有方法可以从这样的数组中获取并返回项数?如果您想获取所有可枚举键的列表,可以使用Object.keysbox.length