{}和[]之间的Javascript差异
Javascript difference between {} and []
我在javascript工作,我遇到这个:
如果我这样做
let object = {};
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
这是因为[]
是一个数组对象,其长度为0,因为没有元素。{}
是一个对象,没有length
属性。数组对象确实有一个名为length
的属性,这就是为什么当你调用[].length
[]
在javascript中表示数组,所以它有长度。{}
只是声明一个对象
它们是不同的东西。一个是对象,另一个是数组。
{}
是一个对象,有键和值。
你不能确定一个对象的长度,因为它的键值对不一定是数字或以任何方式索引。
[]
是一个数组,它有编号的索引。很简单它有长度
- java.net和javascript之间正则表达式的差异
- PHP和Javascript之间的Regex差异
- 是否有任何JavaScript UI组件可以显示字符串之间的差异
- Javascript差异百分比数学
- 在JavaScript中,如何修复元素显示和变量创建之间的初始差异
- Javascript-如何使用bootstrap日期时间选择器自动计算两个时间输入之间的差异
- Javascript”;对于循环“;i-5和i=-5之间的差异
- 基于javascript中位置的数组差异
- 两个单词之间的Javascript差异
- 调用函数和创建函数实例之间的Javascript差异
- x=10 之间的 JavaScript 差异;if(x) 和 if(x===10)
- 两个日期时间跨浏览器之间的Javascript差异(秒)
- 将函数存储到具有函数名或不具有函数名的变量中的Javascript差异
- ||和?之间的Javascript差异:
- 直接调用函数和使用apply之间的Javascript差异
- {}和[]之间的Javascript差异
- 定义函数的JavaScript差异
- localhost和hosted之间的Javascript差异
- IE8 日期时间 JavaScript 差异
- 两个日期之间的JavaScript差异是错误的一个小时