Мы знаем, что 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 или тип способности?