我正在使用javascript,遇到了这个问题:
如果我做
let object = {};
object.length
它会抱怨object.length是不确定的,但是
let object = [];
object.length
作品
知道为什么吗?
谢谢
在JavaScript中,几乎所有东西都是一个对象(但是有例外,最明显的是null
和undefined
),这意味着几乎所有值都具有属性和方法。
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] 删除。
我来说两句