{}和[]之间的Javascript差异

Javascript difference between {} and []

本文关键字:Javascript 差异 之间      更新时间:2023-09-26

我在javascript工作,我遇到这个:

如果我这样做

let object = {};
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

这是因为[]是一个数组对象,其长度为0,因为没有元素。{}是一个对象,没有length属性。数组对象确实有一个名为length的属性,这就是为什么当你调用[].length

时你会看到元素的数量。

[]在javascript中表示数组,所以它有长度。{}只是声明一个对象

它们是不同的东西。一个是对象,另一个是数组。

{}是一个对象,有键和值。
你不能确定一个对象的长度,因为它的键值对不一定是数字或以任何方式索引。

[]是一个数组,它有编号的索引。很简单它有长度