gpt4 book ai didi

{} 和 [] 之间的 Javascript 区别

转载 作者:搜寻专家 更新时间:2023-11-01 04:54:00 24 4
gpt4 key购买 nike

我正在使用 javascript,我遇到了这个:

如果我这样做

let object = {};
object.length

它会提示 object.length 未定义但是

let object = [];
object.length

作品

有人知道为什么吗?

谢谢

最佳答案

在 JavaScript 中,几乎一切都是对象(不过也有异常(exception),最显着的是 nullundefined),这意味着几乎所有值都有属性和方法。

var str = 'Some String';
str.length // 11

{} 是创建空对象的简写。您可以将其视为其他对象类型的基础。 Object 提供原型(prototype)链中的最后一个链接,可以被所有其他对象使用,例如 Array

[] 是创建空数组的简写。虽然也是一种类似于对象的数据结构(实际上前面提到的 Object 在其原型(prototype)链中),但它是一种特殊形式的对象,用于存储值序列。

typeof [] // "object"

创建数组时,它会自动添加一个特殊属性,该属性将反射(reflect)存储的元素数量:length .此值为 automatically updated通过某些方法同时也被其他人使用。

var arr = [];
arr.hasOwnProperty('length'); // true
arr.length; // 0

事实上,除了引擎将它们用于这些方法之外,数组的属性没有什么特别之处(尽管使用它们的理由很少)。

var arr = [];
arr.foo = 'hello';
arr // []
arr.foo // "hello"
arr.length // 0

虽然 Object 不是这样。它没有添加 length 属性,因为它不需要值序列。这就是为什么当您尝试访问 length 时返回的值为 undefined,这对于任何未知属性都是相同的。

var obj = {};
obj.hasOwnProperty('length'); // false
obj.length; // undefined
obj.foo; // undefined

所以,数组基本上是一种特殊的数据结构,需要一系列数据。因此,会自动添加一个表示数据结构长度的属性。

奖励:您可以使用 length 来 trim 数组:

var a = [1,2,3,4,5];
a.length; // 5
a.length = 2;
a; // [1, 2]
a.length; // 2

关于{} 和 [] 之间的 Javascript 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31299172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com