{} 和 [] 之间的 Javascript 区别

标签 javascript

我正在使用 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/

相关文章:

javascript - 在回调函数内部添加参数到回调函数

javascript - 错误。访问 iFrame 内的 PDF 元素

javascript - 使用jquery在同一方向连续滚动 slider

javascript - 如何使用 codeigniter 在不同页面、部分实例化 require.js 模块?

javascript - jQuery 不根据总 li 宽度重置导航元素宽度

javascript - 如何在 html 中使按钮仅在一天中的特定时间可用?

javascript - 样式绑定(bind)不起作用

javascript - 避免在 typescript 中添加字符串和数字?

javascript - 为网络本地存储数据的最佳实践

javascript - 除非禁用缓存,否则 HTML 视频无法工作