me@helium 8 gadi atpakaļ
vecāks
revīzija
078e40768f
1 mainītis faili ar 123 papildinājumiem un 0 dzēšanām
  1. 123 0
      04.md

+ 123 - 0
04.md

@@ -0,0 +1,123 @@
+# Ассоциативные массивы, `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 someTree = {
+    tag: "table", //html tag
+    nestedTags: [ //вложенные тэги
+        {
+                    tag: "tr",
+                    nestedTags: [
+                        {
+                            tag: "td",
+                            content: "some text",
+                        },
+                        {
+                            tag: "td",
+                            content: "some text 2",
+                        }
+                    ]
+        }
+    ],
+    options: 
+    {
+        border: 1,
+    },
+}
+```
+
+Нет сложностей с циклическими ссылками:
+```javascript
+var a = {}
+var b = {}
+a.b = b
+b.a = a
+
+b.b = b
+a.a = a
+
+a.name = "A"
+b.name = "B"
+```
+
+## `in`
+
+Ключевое слово `in` используется для двух задач:
+- проверка наличия ключа в ассоциативном массиве
+
+```javascript
+"fatherName" in a
+"age" in person
+```
+
+- конструкция `for (var key in arr)` для перебора всех элементов ассоциативного массива
+
+```javascript
+for (var key in person){
+    console.log(key+": "+person[key]);
+}
+```
+
+
+### Задание
+Нарисовать HTML таблицу из двух колонок, в которой слева будут ключи, а справа - значения:
+<table><tr><th>name</th><td>Ivan</td></tr><tr><th>surname</th><td>Ivanovv</td></tr><tr><th>fatherName</th><td>Petrovich</td></tr></table>