@rogolev/value 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (176) hide show
  1. package/.prettierignore +4 -4
  2. package/CHANGELOG.md +68 -56
  3. package/LICENSE +41 -41
  4. package/README.md +100 -91
  5. package/babel.config.json +20 -20
  6. package/docs/classes/Convert/toArray.md +100 -0
  7. package/docs/classes/Convert/toAssoc.md +90 -0
  8. package/docs/classes/Convert/toBool.md +72 -0
  9. package/docs/classes/Convert/toBoolean.md +72 -0
  10. package/docs/classes/Convert/toFloat.md +69 -0
  11. package/docs/classes/Convert/toInt.md +86 -0
  12. package/docs/classes/Convert/toInteger.md +86 -0
  13. package/docs/classes/Convert/toList.md +73 -0
  14. package/docs/classes/Convert/toObject.md +76 -0
  15. package/docs/classes/Convert/toString.md +125 -0
  16. package/docs/classes/Convert.md +44 -0
  17. package/docs/classes/Type/isArray.md +106 -0
  18. package/docs/classes/Type/isAssoc.md +57 -0
  19. package/docs/classes/Type/isBigInt.md +49 -0
  20. package/docs/classes/Type/isBool.md +51 -0
  21. package/docs/classes/Type/isBoolean.md +51 -0
  22. package/docs/classes/Type/isClass.md +60 -0
  23. package/docs/classes/Type/isEmpty.md +53 -0
  24. package/docs/classes/Type/isFloat.md +77 -0
  25. package/docs/classes/Type/isFunction.md +64 -0
  26. package/docs/classes/Type/isInfinity.md +59 -0
  27. package/docs/classes/Type/isInt.md +77 -0
  28. package/docs/classes/Type/isInteger.md +77 -0
  29. package/docs/classes/Type/isList.md +49 -0
  30. package/docs/classes/Type/isNaN.md +57 -0
  31. package/docs/classes/Type/isNull.md +49 -0
  32. package/docs/classes/Type/isNumber.md +60 -0
  33. package/docs/classes/Type/isNumeric.md +58 -0
  34. package/docs/classes/Type/isObject.md +53 -0
  35. package/docs/classes/Type/isScalar.md +54 -0
  36. package/docs/classes/Type/isString.md +54 -0
  37. package/docs/classes/Type/isSymbol.md +56 -0
  38. package/docs/classes/Type/isUndefined.md +52 -0
  39. package/docs/classes/Type.md +74 -0
  40. package/docs/classes.md +9 -0
  41. package/docs/helpers/array.md +80 -80
  42. package/docs/helpers/empty.md +77 -77
  43. package/docs/helpers/gettype.md +69 -69
  44. package/docs/helpers/is_array.md +105 -105
  45. package/docs/helpers/is_assoc.md +59 -59
  46. package/docs/helpers/is_bigint.md +57 -57
  47. package/docs/helpers/is_bool.md +50 -50
  48. package/docs/helpers/is_boolean.md +50 -50
  49. package/docs/helpers/is_class.md +73 -73
  50. package/docs/helpers/is_float.md +71 -71
  51. package/docs/helpers/is_function.md +62 -62
  52. package/docs/helpers/is_infinity.md +61 -61
  53. package/docs/helpers/is_int.md +81 -81
  54. package/docs/helpers/is_integer.md +82 -82
  55. package/docs/helpers/is_list.md +51 -51
  56. package/docs/helpers/is_nan.md +59 -59
  57. package/docs/helpers/is_null.md +49 -49
  58. package/docs/helpers/is_number.md +67 -67
  59. package/docs/helpers/is_numeric.md +76 -76
  60. package/docs/helpers/is_object.md +69 -69
  61. package/docs/helpers/is_scalar.md +60 -60
  62. package/docs/helpers/is_string.md +58 -58
  63. package/docs/helpers/is_symbol.md +58 -58
  64. package/docs/helpers/is_undefined.md +56 -56
  65. package/docs/helpers/print.md +187 -187
  66. package/docs/helpers/print_type.md +225 -225
  67. package/docs/helpers/settype.md +78 -78
  68. package/docs/helpers/to_array.md +106 -106
  69. package/docs/helpers/to_assoc.md +91 -91
  70. package/docs/helpers/to_bool.md +76 -76
  71. package/docs/helpers/to_boolean.md +77 -77
  72. package/docs/helpers/to_float.md +70 -70
  73. package/docs/helpers/to_int.md +87 -87
  74. package/docs/helpers/to_integer.md +87 -87
  75. package/docs/helpers/to_list.md +47 -47
  76. package/docs/helpers/to_object.md +76 -76
  77. package/docs/helpers/to_string.md +134 -134
  78. package/docs/helpers.md +51 -51
  79. package/docs/types/NaN.md +30 -30
  80. package/docs/types/array.md +252 -252
  81. package/docs/types/bigint.md +34 -34
  82. package/docs/types/boolean.md +47 -47
  83. package/docs/types/class.md +36 -36
  84. package/docs/types/float.md +35 -35
  85. package/docs/types/function.md +121 -121
  86. package/docs/types/infinity.md +32 -32
  87. package/docs/types/integer.md +35 -35
  88. package/docs/types/null.md +23 -23
  89. package/docs/types/object.md +62 -62
  90. package/docs/types/string.md +33 -33
  91. package/docs/types/symbol.md +29 -29
  92. package/docs/types/undefined.md +25 -25
  93. package/docs/types.md +44 -44
  94. package/eslint.config.mjs +1664 -1664
  95. package/index.mjs +40 -37
  96. package/jest.config.mjs +31 -31
  97. package/package.json +48 -47
  98. package/prettier.config.mjs +224 -224
  99. package/src/classes/Convert.mjs +819 -0
  100. package/src/classes/Type.mjs +1285 -0
  101. package/src/helpers/array.mjs +107 -107
  102. package/src/helpers/empty.mjs +70 -70
  103. package/src/helpers/gettype.mjs +133 -133
  104. package/src/helpers/is_array.mjs +128 -128
  105. package/src/helpers/is_assoc.mjs +51 -51
  106. package/src/helpers/is_bigint.mjs +47 -47
  107. package/src/helpers/is_bool.mjs +43 -43
  108. package/src/helpers/is_boolean.mjs +43 -43
  109. package/src/helpers/is_class.mjs +87 -87
  110. package/src/helpers/is_float.mjs +67 -67
  111. package/src/helpers/is_function.mjs +74 -74
  112. package/src/helpers/is_infinity.mjs +52 -52
  113. package/src/helpers/is_int.mjs +57 -57
  114. package/src/helpers/is_integer.mjs +74 -74
  115. package/src/helpers/is_list.mjs +43 -43
  116. package/src/helpers/is_nan.mjs +51 -51
  117. package/src/helpers/is_null.mjs +37 -37
  118. package/src/helpers/is_number.mjs +49 -49
  119. package/src/helpers/is_numeric.mjs +64 -64
  120. package/src/helpers/is_object.mjs +72 -72
  121. package/src/helpers/is_scalar.mjs +45 -45
  122. package/src/helpers/is_string.mjs +46 -46
  123. package/src/helpers/is_symbol.mjs +46 -46
  124. package/src/helpers/is_undefined.mjs +44 -44
  125. package/src/helpers/print.mjs +245 -245
  126. package/src/helpers/print_type.mjs +261 -261
  127. package/src/helpers/settype.mjs +101 -101
  128. package/src/helpers/to_array.mjs +118 -118
  129. package/src/helpers/to_assoc.mjs +98 -98
  130. package/src/helpers/to_bool.mjs +68 -68
  131. package/src/helpers/to_boolean.mjs +64 -64
  132. package/src/helpers/to_float.mjs +72 -72
  133. package/src/helpers/to_int.mjs +93 -93
  134. package/src/helpers/to_integer.mjs +81 -81
  135. package/src/helpers/to_list.mjs +56 -56
  136. package/src/helpers/to_object.mjs +94 -94
  137. package/src/helpers/to_string.mjs +157 -157
  138. package/tests/classes/Convert.test.mjs +399 -0
  139. package/tests/classes/Type.test.mjs +1263 -0
  140. package/tests/helpers/array.test.mjs +58 -58
  141. package/tests/helpers/empty.test.mjs +22 -22
  142. package/tests/helpers/gettype.test.mjs +74 -74
  143. package/tests/helpers/is_array.test.mjs +404 -404
  144. package/tests/helpers/is_assoc.test.mjs +42 -42
  145. package/tests/helpers/is_bigint.test.mjs +51 -51
  146. package/tests/helpers/is_bool.test.mjs +43 -43
  147. package/tests/helpers/is_boolean.test.mjs +43 -43
  148. package/tests/helpers/is_class.test.mjs +84 -84
  149. package/tests/helpers/is_float.test.mjs +87 -87
  150. package/tests/helpers/is_function.test.mjs +83 -83
  151. package/tests/helpers/is_infinity.test.mjs +46 -46
  152. package/tests/helpers/is_int.test.mjs +45 -45
  153. package/tests/helpers/is_integer.test.mjs +64 -64
  154. package/tests/helpers/is_list.test.mjs +42 -42
  155. package/tests/helpers/is_nan.test.mjs +43 -43
  156. package/tests/helpers/is_null.test.mjs +17 -17
  157. package/tests/helpers/is_number.test.mjs +25 -25
  158. package/tests/helpers/is_numeric.test.mjs +30 -30
  159. package/tests/helpers/is_object.test.mjs +52 -52
  160. package/tests/helpers/is_scalar.test.mjs +21 -21
  161. package/tests/helpers/is_string.test.mjs +20 -20
  162. package/tests/helpers/is_symbol.test.mjs +20 -20
  163. package/tests/helpers/is_undefined.test.mjs +18 -18
  164. package/tests/helpers/print.test.mjs +62 -62
  165. package/tests/helpers/print_type.test.mjs +62 -62
  166. package/tests/helpers/settype.test.mjs +34 -34
  167. package/tests/helpers/to_array.test.mjs +38 -38
  168. package/tests/helpers/to_assoc.test.mjs +33 -33
  169. package/tests/helpers/to_bool.test.mjs +51 -51
  170. package/tests/helpers/to_boolean.test.mjs +51 -51
  171. package/tests/helpers/to_float.test.mjs +26 -26
  172. package/tests/helpers/to_int.test.mjs +48 -48
  173. package/tests/helpers/to_integer.test.mjs +48 -48
  174. package/tests/helpers/to_list.test.mjs +32 -32
  175. package/tests/helpers/to_object.test.mjs +36 -36
  176. package/tests/helpers/to_string.test.mjs +71 -71
package/docs/types/NaN.md CHANGED
@@ -1,30 +1,30 @@
1
- [Главная](../../README.md) / [Типы данных](../types.md) / Не число
2
-
3
- # Не число
4
-
5
- ## Не число в JavaScript
6
-
7
- Глобальное свойство **NaN** является значением, представляющим не-число (Not-A-Number).
8
-
9
- Значение `NaN` имеет тип `number`.
10
-
11
- ```js
12
- typeof NaN; // "number"
13
- ```
14
-
15
- [Подробнее...](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/NaN)
16
-
17
- ## Не число в value.js
18
-
19
- Библиотека не вносит ни каких изменений в определение не числа, а лишь выделяет значение `NaN` в
20
- отдельный тип `NaN`.
21
-
22
- ### Проверка типа
23
-
24
- Проверить, является ли значение не числом, можно с помощью функции [is_nan](../helpers/is_nan.md).
25
-
26
- ```js
27
- is_nan(NaN); // true
28
-
29
- gettype(NaN); // "NaN"
30
- ```
1
+ [Главная](../../README.md) / [Типы данных](../types.md) / Не число
2
+
3
+ # Не число
4
+
5
+ ## Не число в JavaScript
6
+
7
+ Глобальное свойство **NaN** является значением, представляющим не-число (Not-A-Number).
8
+
9
+ Значение `NaN` имеет тип `number`.
10
+
11
+ ```js
12
+ typeof NaN; // "number"
13
+ ```
14
+
15
+ [Подробнее...](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/NaN)
16
+
17
+ ## Не число в value.js
18
+
19
+ Библиотека не вносит ни каких изменений в определение не числа, а лишь выделяет значение `NaN` в
20
+ отдельный тип `NaN`.
21
+
22
+ ### Проверка типа
23
+
24
+ Проверить, является ли значение не числом, можно с помощью функции [is_nan](../helpers/is_nan.md).
25
+
26
+ ```js
27
+ is_nan(NaN); // true
28
+
29
+ gettype(NaN); // "NaN"
30
+ ```
@@ -1,252 +1,252 @@
1
- [Главная](../../README.md) / [Типы данных](../types.md) / Массивы
2
-
3
- ---
4
-
5
- # Массивы
6
-
7
- ## Массивы в JavaScript
8
-
9
- **Массив в JavaScript** — объект типа `Array`, позволяющий хранить набор из нескольких
10
- элементов под одним именем переменной.
11
- [Подробнее.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)
12
-
13
- Для массива `Array` оператор
14
- [typeof](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/typeof) возвращает
15
- `"object"`.
16
-
17
- ```js
18
- const array = [1, 2, 3];
19
- Array.isArray(array); // true
20
- typeof array; // "object"
21
- ```
22
-
23
- Данные массивы являются списками, а значит имеют индексные ключи (`0, 1, 2, ...`). Если вам нужен
24
- ассоциативный массив (массив пар ключ-значение, где ключи являются строками), то можно использовать
25
- объекты (`Object`).
26
-
27
- ```js
28
- const array = {
29
- key1: 'value1',
30
- key2: 'value2',
31
- key3: 'value3',
32
- };
33
- Array.isArray(array); // false
34
- typeof array; // "object"
35
- ```
36
-
37
- Как видно из примера, оператор
38
- [typeof](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/typeof) для
39
- ассоциативного массива также возвращает `"object"`. Это правильно с точки зрения **JavaScript**, но
40
- нам бы хотелось, как-то различать массивы и объекты. Да, списки мы можем отличить от объекта с
41
- помощью метода `Array.isArray` или с помощью оператора `instanceof`, а как отличить ассоциативный
42
- массив от экземпляра класса **ES6**?
43
-
44
- ### Задача
45
-
46
- Отличить ассоциативный массив от экземпляра класса.
47
-
48
- #### Решение 1
49
-
50
- Можно использовать встроенную коллекцию
51
- [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)
52
- добавленную в **ES6**.
53
-
54
- ```js
55
- const map = new Map();
56
- map.set('key1', 'value1');
57
- map.set('key2', 'value2');
58
- map.set('key3', 'value3');
59
- console.log(map); // Map(3) {key1: "value1", key2: "value2", key...}
60
- ```
61
-
62
- Передавать ключи и значения в метод `set` не всегда удобно. Можно передавать список ключей и
63
- значений в конструктор.
64
-
65
- ```js
66
- const data = {
67
- key1: 'value1',
68
- key2: 'value2',
69
- key3: 'value3',
70
- };
71
- const entries = Object.entries(data);
72
- const map = new Map(entries);
73
- console.log(map); // Map(3) {key1: "value1", key2: "value2", key...}
74
- ```
75
-
76
- Передать объект `data` напрямую без преобразования в `entries` не получится.
77
-
78
- ```js
79
- const data = {
80
- key1: 'value1',
81
- key2: 'value2',
82
- key3: 'value3',
83
- };
84
- const map = new Map(data); // TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))
85
- ```
86
-
87
- Отличить экземпляр
88
- [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) от
89
- экземпляра класса мы можем с помощью оператора `instanceof`.
90
-
91
- ```js
92
- const map = new Map();
93
- map instanceof Map; // true
94
- ```
95
-
96
- #### Решение 2
97
-
98
- Отличить ассоциативный массив от экземпляра класса можно проверкой его прототипа.
99
-
100
- ```js
101
- const array = {
102
- key1: 'value1',
103
- key2: 'value2',
104
- key3: 'value3',
105
- };
106
- Object.getPrototypeOf(array) === Object.prototype; // true
107
-
108
- const list = [1, 2, 3];
109
- Object.getPrototypeOf(list) === Object.prototype; // false
110
-
111
- const map = new Map();
112
- Object.getPrototypeOf(map) === Object.prototype; // false
113
- ```
114
-
115
- Если прототипом является `Object.prototype`, значит это ассоциативный массив, иначе это экземпляр
116
- класса.
117
-
118
- #### Итог
119
-
120
- Подведем итог из приведенных выше решений:
121
-
122
- В качестве ассоциативных массивов в первом решении мы использовали экземпляры встроенной коллекции
123
- [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map), а во
124
- втором решении обычные объекты типа `Object`. У обоих подходов есть свои плюсы и минусы. Сравнение
125
- обоих подходов приведено в
126
- [этой таблице](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#objects_vs._maps).
127
-
128
- Какой подход лучше? Все зависит от контекста. В одном конкретном случае будет предпочтительно
129
- использовать коллекцию
130
- [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map), в
131
- другом — объект типа `Object`, да и на вкус и цвет, как говорится.
132
-
133
- ## Массивы в value.js
134
-
135
- Итак, когда мы разобрались с массивами в `JavaScript`, введем понятие массива в **value.js**.
136
-
137
- **Массив в value.js** — это и объект типа `Object` (ассоциативный массив), прототипом которого
138
- является `Object.prototype`, и объект типа `Array`, позволяющие хранить набор из нескольких
139
- элементов под одним именем переменной.
140
-
141
- ```js
142
- const list = [1, 2, 3];
143
- const assoc = {
144
- key1: 'value1',
145
- key2: 'value2',
146
- key3: 'value3',
147
- };
148
-
149
- is_array(list); // true
150
- is_array(assoc); // true
151
-
152
- gettype(list); // "array"
153
- gettype(assoc); // "array"
154
- ```
155
-
156
- Как видно из примера функция [is_array](../helpers/is_array.md) рассматривает оба массива как
157
- равноценные по типу. Также для обоих массивов функция `gettype` возвращает одинаковые значения.
158
-
159
- При этом коллекция
160
- [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map), как и
161
- другие коллекции, считается экземпляром класса.
162
-
163
- ```js
164
- const map = new Map();
165
- const set = new Set();
166
-
167
- is_array(map); // false
168
- is_array(set); // false
169
-
170
- gettype(map); // "object"
171
- gettype(set); // "object"
172
- ```
173
-
174
- ### Проверка типа
175
-
176
- Проверить, что переменная является массивом, можно с помощью функции
177
- [is_array](../helpers/is_array.md).
178
-
179
- ```js
180
- const array = { foo: 'bar' };
181
-
182
- is_array(array); // true
183
- ```
184
-
185
- ### Привидение к типу
186
-
187
- Привести к массиву можно с помощью функции `to_array`.
188
-
189
- ```js
190
- to_array(123); // [123]
191
- ```
192
-
193
- ### Примеры использования массивов в value.js
194
-
195
- #### Создание и использование списков
196
-
197
- ```js
198
- const list = [1, 2, 3, 4, 5];
199
- console.log(list); // [1, 2, 3, 4, 5]
200
- console.log(list.length); // 5
201
- console.log(list[0]); // 1
202
- console.log(list[list.length - 1]); // 5
203
- ```
204
-
205
- #### Создание и использование ассоциативных массивов
206
-
207
- ```js
208
- const assoc = {
209
- name: 'John',
210
- age: 30,
211
- city: 'New York',
212
- };
213
- console.log(assoc); // { name: 'John', age: 30, city: 'New York' }
214
- console.log(assoc.name); // John
215
- console.log(assoc['age']); // 30
216
- ```
217
-
218
- #### Преобразование массивов в коллекции и обратно
219
-
220
- ```js
221
- const array = { a: 1, b: 2, c: 3 };
222
- const entries = Object.entries(array);
223
- const map = new Map(entries);
224
- console.log(map); // Map(3) { 'a' => 1, 'b' => 2, 'c' => 3 }
225
-
226
- const newArray = Object.fromEntries(map);
227
- console.log(newArray); // { a: 1, b: 2, c: 3 }
228
- ```
229
-
230
- #### Проверка типа массива
231
-
232
- ```js
233
- const list = [1, 2, 3];
234
- const assoc = { key1: 'value1', key2: 'value2', key3: 'value3' };
235
-
236
- console.log(is_array(list)); // true
237
- console.log(is_array(assoc)); // true
238
- console.log(is_array(new Map())); // false
239
- console.log(is_array(new Set())); // false
240
- ```
241
-
242
- #### Получение типа переменной
243
-
244
- ```js
245
- const list = [1, 2, 3];
246
- const assoc = { key1: 'value1', key2: 'value2', key3: 'value3' };
247
-
248
- console.log(gettype(list)); // "array"
249
- console.log(gettype(assoc)); // "array"
250
- console.log(gettype(new Map())); // "object"
251
- console.log(gettype(new Set())); // "object"
252
- ```
1
+ [Главная](../../README.md) / [Типы данных](../types.md) / Массивы
2
+
3
+ ---
4
+
5
+ # Массивы
6
+
7
+ ## Массивы в JavaScript
8
+
9
+ **Массив в JavaScript** — объект типа `Array`, позволяющий хранить набор из нескольких
10
+ элементов под одним именем переменной.
11
+ [Подробнее.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)
12
+
13
+ Для массива `Array` оператор
14
+ [typeof](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/typeof) возвращает
15
+ `"object"`.
16
+
17
+ ```js
18
+ const array = [1, 2, 3];
19
+ Array.isArray(array); // true
20
+ typeof array; // "object"
21
+ ```
22
+
23
+ Данные массивы являются списками, а значит имеют индексные ключи (`0, 1, 2, ...`). Если вам нужен
24
+ ассоциативный массив (массив пар ключ-значение, где ключи являются строками), то можно использовать
25
+ объекты (`Object`).
26
+
27
+ ```js
28
+ const array = {
29
+ key1: 'value1',
30
+ key2: 'value2',
31
+ key3: 'value3',
32
+ };
33
+ Array.isArray(array); // false
34
+ typeof array; // "object"
35
+ ```
36
+
37
+ Как видно из примера, оператор
38
+ [typeof](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/typeof) для
39
+ ассоциативного массива также возвращает `"object"`. Это правильно с точки зрения **JavaScript**, но
40
+ нам бы хотелось, как-то различать массивы и объекты. Да, списки мы можем отличить от объекта с
41
+ помощью метода `Array.isArray` или с помощью оператора `instanceof`, а как отличить ассоциативный
42
+ массив от экземпляра класса **ES6**?
43
+
44
+ ### Задача
45
+
46
+ Отличить ассоциативный массив от экземпляра класса.
47
+
48
+ #### Решение 1
49
+
50
+ Можно использовать встроенную коллекцию
51
+ [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)
52
+ добавленную в **ES6**.
53
+
54
+ ```js
55
+ const map = new Map();
56
+ map.set('key1', 'value1');
57
+ map.set('key2', 'value2');
58
+ map.set('key3', 'value3');
59
+ console.log(map); // Map(3) {key1: "value1", key2: "value2", key...}
60
+ ```
61
+
62
+ Передавать ключи и значения в метод `set` не всегда удобно. Можно передавать список ключей и
63
+ значений в конструктор.
64
+
65
+ ```js
66
+ const data = {
67
+ key1: 'value1',
68
+ key2: 'value2',
69
+ key3: 'value3',
70
+ };
71
+ const entries = Object.entries(data);
72
+ const map = new Map(entries);
73
+ console.log(map); // Map(3) {key1: "value1", key2: "value2", key...}
74
+ ```
75
+
76
+ Передать объект `data` напрямую без преобразования в `entries` не получится.
77
+
78
+ ```js
79
+ const data = {
80
+ key1: 'value1',
81
+ key2: 'value2',
82
+ key3: 'value3',
83
+ };
84
+ const map = new Map(data); // TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))
85
+ ```
86
+
87
+ Отличить экземпляр
88
+ [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) от
89
+ экземпляра класса мы можем с помощью оператора `instanceof`.
90
+
91
+ ```js
92
+ const map = new Map();
93
+ map instanceof Map; // true
94
+ ```
95
+
96
+ #### Решение 2
97
+
98
+ Отличить ассоциативный массив от экземпляра класса можно проверкой его прототипа.
99
+
100
+ ```js
101
+ const array = {
102
+ key1: 'value1',
103
+ key2: 'value2',
104
+ key3: 'value3',
105
+ };
106
+ Object.getPrototypeOf(array) === Object.prototype; // true
107
+
108
+ const list = [1, 2, 3];
109
+ Object.getPrototypeOf(list) === Object.prototype; // false
110
+
111
+ const map = new Map();
112
+ Object.getPrototypeOf(map) === Object.prototype; // false
113
+ ```
114
+
115
+ Если прототипом является `Object.prototype`, значит это ассоциативный массив, иначе это экземпляр
116
+ класса.
117
+
118
+ #### Итог
119
+
120
+ Подведем итог из приведенных выше решений:
121
+
122
+ В качестве ассоциативных массивов в первом решении мы использовали экземпляры встроенной коллекции
123
+ [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map), а во
124
+ втором решении обычные объекты типа `Object`. У обоих подходов есть свои плюсы и минусы. Сравнение
125
+ обоих подходов приведено в
126
+ [этой таблице](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#objects_vs._maps).
127
+
128
+ Какой подход лучше? Все зависит от контекста. В одном конкретном случае будет предпочтительно
129
+ использовать коллекцию
130
+ [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map), в
131
+ другом — объект типа `Object`, да и на вкус и цвет, как говорится.
132
+
133
+ ## Массивы в value.js
134
+
135
+ Итак, когда мы разобрались с массивами в `JavaScript`, введем понятие массива в **value.js**.
136
+
137
+ **Массив в value.js** — это и объект типа `Object` (ассоциативный массив), прототипом которого
138
+ является `Object.prototype`, и объект типа `Array`, позволяющие хранить набор из нескольких
139
+ элементов под одним именем переменной.
140
+
141
+ ```js
142
+ const list = [1, 2, 3];
143
+ const assoc = {
144
+ key1: 'value1',
145
+ key2: 'value2',
146
+ key3: 'value3',
147
+ };
148
+
149
+ is_array(list); // true
150
+ is_array(assoc); // true
151
+
152
+ gettype(list); // "array"
153
+ gettype(assoc); // "array"
154
+ ```
155
+
156
+ Как видно из примера функция [is_array](../helpers/is_array.md) рассматривает оба массива как
157
+ равноценные по типу. Также для обоих массивов функция `gettype` возвращает одинаковые значения.
158
+
159
+ При этом коллекция
160
+ [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map), как и
161
+ другие коллекции, считается экземпляром класса.
162
+
163
+ ```js
164
+ const map = new Map();
165
+ const set = new Set();
166
+
167
+ is_array(map); // false
168
+ is_array(set); // false
169
+
170
+ gettype(map); // "object"
171
+ gettype(set); // "object"
172
+ ```
173
+
174
+ ### Проверка типа
175
+
176
+ Проверить, что переменная является массивом, можно с помощью функции
177
+ [is_array](../helpers/is_array.md).
178
+
179
+ ```js
180
+ const array = { foo: 'bar' };
181
+
182
+ is_array(array); // true
183
+ ```
184
+
185
+ ### Привидение к типу
186
+
187
+ Привести к массиву можно с помощью функции `to_array`.
188
+
189
+ ```js
190
+ to_array(123); // [123]
191
+ ```
192
+
193
+ ### Примеры использования массивов в value.js
194
+
195
+ #### Создание и использование списков
196
+
197
+ ```js
198
+ const list = [1, 2, 3, 4, 5];
199
+ console.log(list); // [1, 2, 3, 4, 5]
200
+ console.log(list.length); // 5
201
+ console.log(list[0]); // 1
202
+ console.log(list[list.length - 1]); // 5
203
+ ```
204
+
205
+ #### Создание и использование ассоциативных массивов
206
+
207
+ ```js
208
+ const assoc = {
209
+ name: 'John',
210
+ age: 30,
211
+ city: 'New York',
212
+ };
213
+ console.log(assoc); // { name: 'John', age: 30, city: 'New York' }
214
+ console.log(assoc.name); // John
215
+ console.log(assoc['age']); // 30
216
+ ```
217
+
218
+ #### Преобразование массивов в коллекции и обратно
219
+
220
+ ```js
221
+ const array = { a: 1, b: 2, c: 3 };
222
+ const entries = Object.entries(array);
223
+ const map = new Map(entries);
224
+ console.log(map); // Map(3) { 'a' => 1, 'b' => 2, 'c' => 3 }
225
+
226
+ const newArray = Object.fromEntries(map);
227
+ console.log(newArray); // { a: 1, b: 2, c: 3 }
228
+ ```
229
+
230
+ #### Проверка типа массива
231
+
232
+ ```js
233
+ const list = [1, 2, 3];
234
+ const assoc = { key1: 'value1', key2: 'value2', key3: 'value3' };
235
+
236
+ console.log(is_array(list)); // true
237
+ console.log(is_array(assoc)); // true
238
+ console.log(is_array(new Map())); // false
239
+ console.log(is_array(new Set())); // false
240
+ ```
241
+
242
+ #### Получение типа переменной
243
+
244
+ ```js
245
+ const list = [1, 2, 3];
246
+ const assoc = { key1: 'value1', key2: 'value2', key3: 'value3' };
247
+
248
+ console.log(gettype(list)); // "array"
249
+ console.log(gettype(assoc)); // "array"
250
+ console.log(gettype(new Map())); // "object"
251
+ console.log(gettype(new Set())); // "object"
252
+ ```
@@ -1,34 +1,34 @@
1
- [Главная](../../README.md) / [Типы данных](../types.md) / Большое целое число
2
-
3
- # Большое целое число
4
-
5
- ## Большое целое число в JavaScript
6
-
7
- `BigInt` – это специальный числовой тип, который предоставляет возможность работать с целыми числами
8
- произвольной длины.
9
-
10
- [Подробнее...](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/BigInt)
11
-
12
- ## Большое целое число в value.js
13
-
14
- Библиотека не вносит ни каких изменений в определение большого целого числа.
15
-
16
- ### Проверка типа
17
-
18
- Проверить, является ли значение большим целым числом, можно с помощью функции
19
- [is_bigint](../helpers/is_bigint.md).
20
-
21
- ```js
22
- is_bigint(10n); // true
23
- is_bigint(10); // false
24
-
25
- gettype(10n); // "bigint"
26
- ```
27
-
28
- ### Привидение к типу
29
-
30
- Привести к большому целому числу можно с помощью функции `to_bigint`.
31
-
32
- ```js
33
- to_bigint(10); // 10n
34
- ```
1
+ [Главная](../../README.md) / [Типы данных](../types.md) / Большое целое число
2
+
3
+ # Большое целое число
4
+
5
+ ## Большое целое число в JavaScript
6
+
7
+ `BigInt` – это специальный числовой тип, который предоставляет возможность работать с целыми числами
8
+ произвольной длины.
9
+
10
+ [Подробнее...](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/BigInt)
11
+
12
+ ## Большое целое число в value.js
13
+
14
+ Библиотека не вносит ни каких изменений в определение большого целого числа.
15
+
16
+ ### Проверка типа
17
+
18
+ Проверить, является ли значение большим целым числом, можно с помощью функции
19
+ [is_bigint](../helpers/is_bigint.md).
20
+
21
+ ```js
22
+ is_bigint(10n); // true
23
+ is_bigint(10); // false
24
+
25
+ gettype(10n); // "bigint"
26
+ ```
27
+
28
+ ### Привидение к типу
29
+
30
+ Привести к большому целому числу можно с помощью функции `to_bigint`.
31
+
32
+ ```js
33
+ to_bigint(10); // 10n
34
+ ```