# Ассоциативные массивы, `in` Кроме обычных массивов, в которых ключем служит целое число от 0 до `array.length -1`, существуют **ассоциативные массивы**, ключем в котором может быть любой другой тип данных; обычно используется строка. В **JavaScript** нет специального типа данных для ассоциативных массивов - вместо этого ассоциативные массивы представлены объектами (`Object`): ## Создание ассоциативного массива и доступ к полям ```javascript var person = { name: "Ivan", surname: "Ivanovv", "fatherName": "Petrovich", } typeof person ``` Нет разницы, определять ключи *литерально* или через строку (в кавычках `"fatherName"`). Для обращения к элементам по ключу используются следующие нотации: ```javascript person.fatherName person["name"] ``` Обратите внимание, что `person.fatherName` работает так же как и `person["name"]`, несмотря на то, что определены наоборот. Для обращения через ключ в переменной используется нотация с квадратными скобками: ```javascript var key = "surname"; person[key] person.key ``` Если просто написать `person.key`, то **JavaScript** будет искать ключ `key` *литерально*, а не по значению переменной `key` ("surname") Вы можете определить новый элемент массива просто присвоив ему значение: ```javascript person.age = 98; person ``` Также можно создавать массив через конструктор Object: ```javascript var a = new Object(); a.name = "Petr" a.surname = "Petrov"; a["age"] = 17; ``` Получить ключи ассоциативного массива можно с помощью функции `Object.keys`: ```javascript Object.keys(person) ``` В качестве значений в ассоциативном массиве могут быть любые типы данных, в том числе и другие ассоциативные массивы: ```javascript var tree = { name: "Ivan", fatherName: "Petrovich", surname: "Ivanov", children: [ { name: "Maria", fatherName: "Ivanovna", surname: "Ivanova", }, { name: "Petr", fatherName: "Ivanovich", surname: "Ivanov", }, { name: "Nikolay", fatherName: "Ivanovich", surname: "Ivanov", }, ] } ``` Нет сложностей с циклическими ссылками: ```javascript var a = {} var b = {} a.b = b b.a = a b.b = b a.a = a a.name = "A" b.name = "B" for (var i=0,child=tree.children[i]; inameIvansurnameIvanovvfatherNamePetrovich