这是Javascript中的数组还是对象?
有人能给我解释一下这段代码以及“arr”的类型吗。 我知道数组是一个对象,但是这是Javascript中的数组还是对象?,javascript,Javascript,有人能给我解释一下这段代码以及“arr”的类型吗。 我知道数组是一个对象,但是 如果[[Class]]的行为类似于对象,为什么它会显示为数组 arr.length返回3。怎么做 var arr = [0, 1, 3]; arr.name = "asdf"; console.log(arr[1] + " " + arr.name + " " + arr.length); // Returns-> 1 asdf 3 Object.prototype.toString.call(arr);
var arr = [0, 1, 3];
arr.name = "asdf";
console.log(arr[1] + " " + arr.name + " " + arr.length);
// Returns-> 1 asdf 3
Object.prototype.toString.call(arr);
// Returns-> "[object Array]"
这已经在这篇文章中得到了详细的回答
var-arr=[0,1,3]
只是var-arr=Array.new(0,1,3)
的语法糖。这是一样的,因此arr
是一个Array
,而Array
的实例是一个对象:
var arr = [0, 1, 3];
typeof arr; // returns "object"
arr instanceof Array; // returns true
Array
重写lenght()
函数,只计算数组中的元素数;设置arr.name=“asdf”
时,您正在为此特定对象设置属性,但length()
函数不计算该属性。JavaScript数组是专用对象,因此它们既是数组又是对象。因此,您可以像添加任何其他对象一样向其添加属性。length
属性只考虑数值属性,因此添加任意属性(如name
)不会影响它。所有javascript变量都是对象。像这样的一些对象也是数组
因此,您可以设置属性(因为它是一个对象),也可以查看特定于数组的属性(因为它是一个数组)。有关1,请参阅“数组实例的属性”一节:
数组实例从数组原型对象继承属性,其[[Class]]内部属性值为“Array”。数组实例还具有以下属性
有关第2节,请参见“长度”一节
此数组对象的length属性是一个数据属性,其值在数值上始终大于名称为数组索引的每个可删除属性的名称
Object.prototype.toString.call([])
将始终提供“”[对象数组]”
,在其上附加属性没有什么特别之处。长度为3,因为您添加了3个元素(0、1、3
)。