我正在研究javascript,我遇到了这个问题:
如果我做
let object = {};
object.length
Run Code Online (Sandbox Code Playgroud)
它会抱怨object.length未定义但是
let object = [];
object.length
Run Code Online (Sandbox Code Playgroud)
作品
谁知道为什么?
谢谢
在JavaScript中,几乎一切都是对象(也有例外,但最显着的null和undefined),这意味着几乎所有值都具有属性和方法.
var str = 'Some String';
str.length // 11
Run Code Online (Sandbox Code Playgroud)
{}是创建空对象的简写.您可以将此视为其他对象类型的基础.Object提供原型链中的最后一个链接,可以被所有其他对象使用,例如Array.
[]是创建空数组的简写.虽然也是一个类似于对象的数据结构(实际上Object如前所述,在其原型链中),但它是一种存储值序列的特殊形式的对象.
typeof [] // "object"
Run Code Online (Sandbox Code Playgroud)
创建数组时,它会自动添加一个特殊属性,以反映存储的元素数量:length.此值由某些方法自动更新,同时也由其他人使用.
var arr = [];
arr.hasOwnProperty('length'); // true
arr.length; // 0
Run Code Online (Sandbox Code Playgroud)
事实上,数组上的属性并没有什么特别之处(尽管使用它们的原因很少),除了引擎使用它们进行这些方法.
var arr = [];
arr.foo = 'hello';
arr // []
arr.foo // "hello"
arr.length // 0
Run Code Online (Sandbox Code Playgroud)
Object但事实并非如此.它没有length添加属性,因为它不期望一系列值.这就是为什么当您尝试访问length返回的值时undefined,对于任何未知属性都是相同的.
var obj = {};
obj.hasOwnProperty('length'); // false
obj.length; // undefined
obj.foo; // undefined
Run Code Online (Sandbox Code Playgroud)
因此,基本上数组是一种特殊的数据结构,需要一系列数据.因此,会自动添加一个表示数据结构长度的属性.
奖励:您可以使用length修剪数组:
var a = [1,2,3,4,5];
a.length; // 5
a.length = 2;
a; // [1, 2]
a.length; // 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5864 次 |
| 最近记录: |