{}和[]之间的JavaScript区别

Telenoobies

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

如果我做

let object = {};
object.length

它会抱怨object.length是不确定的,但是

let object = [];
object.length 

作品

知道为什么吗?

谢谢

杰森·库斯特

在JavaScript中,几乎所有东西都是一个对象(但是有例外,最明显的是nullundefined),这意味着几乎所有值都具有属性和方法。

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

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

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

typeof [] // "object"

创建数组时,它会自动添加一个特殊属性,该属性将反映存储的元素数:length该值可以通过某些方法自动更新,而其他方法也可以使用。

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用来修剪数组:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章