我试图理解为什么Javascript打印一个空数组时,它应该至少有一个值在里面。请检查此代码:
detail = [];
detail.cat1=[];
detail.cat2=[];
detail.cat3=[];
detail.cat4=[];
var newEntry = {"cod":"01","dt":"2021-10-02 09:07:21.205-07:00"};
detail.cat2.push(newEntry);
console.log(detail);
console.log(detail.length);
console.log(detail.cat2);
结果如下:
> Array []
> 0
> Array [Object { cod: "01", dt: "2021-10-02 09:07:21.205-07:00" }]
它怎么能打印[],因为我里面有一个对象?长度怎么可能是零呢?我使用任何Javascript在线编辑器,结果都是一样的。
由于数组实际上是一个对象,因此我们可以直接为单个数组添加方法/属性。
然后,如果您想查看对象中的键,例如,object。keys不会看到它,但是Reflect.ownKeys()会。
defineProperty的Reflect版本将返回成功或失败,而Object的返回传递的对象。
记住Reflect.preventExtensions()会(像它说的那样)阻止你或其他人扩展它们。
至于长度的问题,"。length"给出值的长度,而不是属性所以它仍然是0
数组是一个值的索引集合,这意味着你可以把元素放在特定的索引,并从特定的索引获取元素。
在下面的例子中,你可以看到,如果数组中已经有元素,那么你可以使用length
属性获得它的length
。
记住:数组长度为(highest integer index at which the element is present in array + 1)
const arr = [1, 2, 3, 4];
console.log(arr); // prints whole array
console.log(arr.length); // prints length of an array
console.log(arr[2]); // Element at index 2
如果你将元素设置为特定索引例如arr[8] = "something"
那么它的length
将是9
const arr = [];
arr[8] = "something";
console.log(arr.length) // 9
这是真的,数组是对象,所以你可以设置/从数组获取值。但是如果你设置的属性不是带编号的索引那么它不会增加它的长度但是它会将数组对象的属性设置为:
const arr = [];
arr["introduction"] = "I'm an array";
arr.property = "This is a property"
console.log(arr.length);
console.log(arr.introduction);
console.log(arr.property);
显示数组时,默认的array .prototype。通常调用toString方法。这实际上调用了Array.prototype。不带参数地连接,因此生成一个以逗号分隔的数组元素字符串。
join方法只返回具有正整数名称的属性(数组索引,表示数组元素),其他属性被join忽略。同样,只有数组元素影响length属性,通常属性(即那些名称没有数组索引的属性)不影响length。