javascript 中的关联数组是一个错误?
Associative arrays in javascript is a bug?
我们知道 JavaScript 不支持具有命名索引的数组。 (关联数组)
但是当我们在 javascript 中声明一个关联数组时,它不会抛出错误而且它的工作令人惊讶。
let arr = [];
arr.name = 'John';
arr.lastName = 'Doe';
arr.age = 46;
let obj = {name: 'John', lastName: 'Doe', age: 46};
当console.log('arr')
时,会显示:
[name: "John", lastName: "Doe", age: 46] //Shown with a special array sign
age: 46
lastName: "Doe"
name: "John"
length: 0
__proto__: Array(0) //Shown Array Not Object
并且:
console.log(arr instanceof Array); //true
console.log(arr instanceof Object); //true
console.log(obj instanceof Array); //false
console.log(obj instanceof Object); //true
如您所见,Javascript 显示一个带有数组特定符号的关联数组。 []
(括号)
但是它把这个数组当作一个对象 因为一些数组方法和属性(比如 length
)会产生不正确的结果。
另外,如果 JavaScript 将这种类型的数组作为对象使用,为什么不使用对象的特殊标记? {}
(大括号)
总之,这是JavaScript解释器的bug还是一种能力?
Array 是一个对象 - 它有自己的方法供您使用。
该对象不是数组 - 您不能使用 Array-object 的方法。
我发现这段文字用几句话描述了它:http://www.javascripter.net/faq/arrayobject.htm
在 Javascript 中,数组不仅是 "treated as" 一个对象——它本身就是一个对象。正如您已经看到的,因为 arr instanceof Object
为真。
因此,与所有对象一样,您可以将属性分配给数组。
length
是数组的特殊属性,表示数组元素的个数。由于在您的示例中 arr
没有元素,因此其 length
属性 正确为 0。对象不会自动具有特殊的 length
属性.
我们知道 JavaScript 不支持具有命名索引的数组。 (关联数组)
但是当我们在 javascript 中声明一个关联数组时,它不会抛出错误而且它的工作令人惊讶。
let arr = [];
arr.name = 'John';
arr.lastName = 'Doe';
arr.age = 46;
let obj = {name: 'John', lastName: 'Doe', age: 46};
当console.log('arr')
时,会显示:
[name: "John", lastName: "Doe", age: 46] //Shown with a special array sign
age: 46
lastName: "Doe"
name: "John"
length: 0
__proto__: Array(0) //Shown Array Not Object
并且:
console.log(arr instanceof Array); //true
console.log(arr instanceof Object); //true
console.log(obj instanceof Array); //false
console.log(obj instanceof Object); //true
如您所见,Javascript 显示一个带有数组特定符号的关联数组。 []
(括号)
但是它把这个数组当作一个对象 因为一些数组方法和属性(比如 length
)会产生不正确的结果。
另外,如果 JavaScript 将这种类型的数组作为对象使用,为什么不使用对象的特殊标记? {}
(大括号)
总之,这是JavaScript解释器的bug还是一种能力?
Array 是一个对象 - 它有自己的方法供您使用。 该对象不是数组 - 您不能使用 Array-object 的方法。
我发现这段文字用几句话描述了它:http://www.javascripter.net/faq/arrayobject.htm
在 Javascript 中,数组不仅是 "treated as" 一个对象——它本身就是一个对象。正如您已经看到的,因为 arr instanceof Object
为真。
因此,与所有对象一样,您可以将属性分配给数组。
length
是数组的特殊属性,表示数组元素的个数。由于在您的示例中 arr
没有元素,因此其 length
属性 正确为 0。对象不会自动具有特殊的 length
属性.