@rogolev/value 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. package/.prettierignore +4 -4
  2. package/CHANGELOG.md +82 -56
  3. package/LICENSE +41 -41
  4. package/README.md +118 -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/Value/constructor.md +48 -0
  41. package/docs/classes/Value/get.md +51 -0
  42. package/docs/classes/Value/getType.md +71 -0
  43. package/docs/classes/Value/isArray.md +67 -0
  44. package/docs/classes/Value/isAssoc.md +68 -0
  45. package/docs/classes/Value/isBigInt.md +52 -0
  46. package/docs/classes/Value/isBool.md +60 -0
  47. package/docs/classes/Value/isBoolean.md +60 -0
  48. package/docs/classes/Value/isClass.md +55 -0
  49. package/docs/classes/Value/isEmpty.md +84 -0
  50. package/docs/classes/Value/isFloat.md +52 -0
  51. package/docs/classes/Value/isFunction.md +60 -0
  52. package/docs/classes/Value/isInfinity.md +60 -0
  53. package/docs/classes/Value/isInt.md +52 -0
  54. package/docs/classes/Value/isInteger.md +52 -0
  55. package/docs/classes/Value/isList.md +59 -0
  56. package/docs/classes/Value/isNaN.md +79 -0
  57. package/docs/classes/Value/isNull.md +59 -0
  58. package/docs/classes/Value/isNumber.md +80 -0
  59. package/docs/classes/Value/isNumeric.md +79 -0
  60. package/docs/classes/Value/isObject.md +68 -0
  61. package/docs/classes/Value/isScalar.md +72 -0
  62. package/docs/classes/Value/isString.md +67 -0
  63. package/docs/classes/Value/isSymbol.md +75 -0
  64. package/docs/classes/Value/isUndefined.md +67 -0
  65. package/docs/classes/Value/print.md +164 -0
  66. package/docs/classes/Value/printType.md +158 -0
  67. package/docs/classes/Value/setType.md +79 -0
  68. package/docs/classes/Value/toArray.md +85 -0
  69. package/docs/classes/Value/toAssoc.md +85 -0
  70. package/docs/classes/Value/toBool.md +71 -0
  71. package/docs/classes/Value/toBoolean.md +71 -0
  72. package/docs/classes/Value/toFloat.md +72 -0
  73. package/docs/classes/Value/toInt.md +72 -0
  74. package/docs/classes/Value/toInteger.md +72 -0
  75. package/docs/classes/Value/toList.md +77 -0
  76. package/docs/classes/Value/toObject.md +78 -0
  77. package/docs/classes/Value/toPrint.md +115 -0
  78. package/docs/classes/Value/toPrintType.md +110 -0
  79. package/docs/classes/Value/toString.md +134 -0
  80. package/docs/classes/Value.md +113 -0
  81. package/docs/classes.md +11 -0
  82. package/docs/constants.md +47 -0
  83. package/docs/helpers/array.md +80 -80
  84. package/docs/helpers/empty.md +77 -77
  85. package/docs/helpers/gettype.md +69 -69
  86. package/docs/helpers/is_array.md +105 -105
  87. package/docs/helpers/is_assoc.md +59 -59
  88. package/docs/helpers/is_bigint.md +57 -57
  89. package/docs/helpers/is_bool.md +50 -50
  90. package/docs/helpers/is_boolean.md +50 -50
  91. package/docs/helpers/is_class.md +73 -73
  92. package/docs/helpers/is_float.md +71 -71
  93. package/docs/helpers/is_function.md +62 -62
  94. package/docs/helpers/is_infinity.md +61 -61
  95. package/docs/helpers/is_int.md +81 -81
  96. package/docs/helpers/is_integer.md +82 -82
  97. package/docs/helpers/is_list.md +51 -51
  98. package/docs/helpers/is_nan.md +59 -59
  99. package/docs/helpers/is_null.md +49 -49
  100. package/docs/helpers/is_number.md +67 -67
  101. package/docs/helpers/is_numeric.md +76 -76
  102. package/docs/helpers/is_object.md +69 -69
  103. package/docs/helpers/is_scalar.md +60 -60
  104. package/docs/helpers/is_string.md +58 -58
  105. package/docs/helpers/is_symbol.md +58 -58
  106. package/docs/helpers/is_undefined.md +56 -56
  107. package/docs/helpers/print.md +187 -187
  108. package/docs/helpers/print_type.md +225 -225
  109. package/docs/helpers/settype.md +78 -78
  110. package/docs/helpers/to_array.md +106 -106
  111. package/docs/helpers/to_assoc.md +91 -91
  112. package/docs/helpers/to_bool.md +76 -76
  113. package/docs/helpers/to_boolean.md +77 -77
  114. package/docs/helpers/to_float.md +70 -70
  115. package/docs/helpers/to_int.md +87 -87
  116. package/docs/helpers/to_integer.md +87 -87
  117. package/docs/helpers/to_list.md +47 -47
  118. package/docs/helpers/to_object.md +76 -76
  119. package/docs/helpers/to_string.md +134 -134
  120. package/docs/helpers/value.md +95 -0
  121. package/docs/helpers.md +53 -51
  122. package/docs/types/NaN.md +30 -30
  123. package/docs/types/array.md +252 -252
  124. package/docs/types/bigint.md +34 -34
  125. package/docs/types/boolean.md +47 -47
  126. package/docs/types/class.md +36 -36
  127. package/docs/types/float.md +35 -35
  128. package/docs/types/function.md +121 -121
  129. package/docs/types/infinity.md +32 -32
  130. package/docs/types/integer.md +35 -35
  131. package/docs/types/null.md +23 -23
  132. package/docs/types/object.md +62 -62
  133. package/docs/types/string.md +33 -33
  134. package/docs/types/symbol.md +29 -29
  135. package/docs/types/undefined.md +25 -25
  136. package/docs/types.md +44 -44
  137. package/eslint.config.mjs +1664 -1664
  138. package/index.mjs +43 -37
  139. package/jest.config.mjs +31 -31
  140. package/package.json +48 -47
  141. package/prettier.config.mjs +224 -224
  142. package/src/classes/Convert.mjs +818 -0
  143. package/src/classes/Type.mjs +1284 -0
  144. package/src/classes/Value.mjs +2846 -0
  145. package/src/constants.mjs +14 -0
  146. package/src/helpers/gettype.mjs +30 -14
  147. package/src/helpers/value.mjs +92 -0
  148. package/tests/classes/Convert.test.mjs +398 -0
  149. package/tests/classes/Type.test.mjs +1262 -0
  150. package/tests/classes/Value.test.mjs +423 -0
  151. package/tests/constants.test.mjs +75 -0
  152. package/tests/helpers/value.test.mjs +68 -0
@@ -0,0 +1,2846 @@
1
+ import empty from '../helpers/empty.mjs';
2
+ import gettype from '../helpers/gettype.mjs';
3
+ import is_array from '../helpers/is_array.mjs';
4
+ import is_assoc from '../helpers/is_assoc.mjs';
5
+ import is_bigint from '../helpers/is_bigint.mjs';
6
+ import is_bool from '../helpers/is_bool.mjs';
7
+ import is_class from '../helpers/is_class.mjs';
8
+ import is_float from '../helpers/is_float.mjs';
9
+ import is_function from '../helpers/is_function.mjs';
10
+ import is_infinity from '../helpers/is_infinity.mjs';
11
+ import is_int from '../helpers/is_int.mjs';
12
+ import is_list from '../helpers/is_list.mjs';
13
+ import is_nan from '../helpers/is_nan.mjs';
14
+ import is_null from '../helpers/is_null.mjs';
15
+ import is_number from '../helpers/is_number.mjs';
16
+ import is_numeric from '../helpers/is_numeric.mjs';
17
+ import is_object from '../helpers/is_object.mjs';
18
+ import is_scalar from '../helpers/is_scalar.mjs';
19
+ import is_string from '../helpers/is_string.mjs';
20
+ import is_symbol from '../helpers/is_symbol.mjs';
21
+ import is_undefined from '../helpers/is_undefined.mjs';
22
+ import print from '../helpers/print.mjs';
23
+ import print_type from '../helpers/print_type.mjs';
24
+ import settype from '../helpers/settype.mjs';
25
+ import to_array from '../helpers/to_array.mjs';
26
+ import to_assoc from '../helpers/to_assoc.mjs';
27
+ import to_bool from '../helpers/to_bool.mjs';
28
+ import to_float from '../helpers/to_float.mjs';
29
+ import to_int from '../helpers/to_int.mjs';
30
+ import to_list from '../helpers/to_list.mjs';
31
+ import to_object from '../helpers/to_object.mjs';
32
+ import to_string from '../helpers/to_string.mjs';
33
+
34
+ /**
35
+ * Класс `Value` представляет обертку для значений различных типов и предоставляет методы для работы с ними.
36
+ *
37
+ * ### Описание
38
+ *
39
+ * Класс `Value` используется для хранения значения и предоставления методов для работы с этим значением.
40
+ * Значение хранится в приватном свойстве `#value` и не может быть изменено после создания экземпляра класса.
41
+ * Класс также предоставляет методы для получения типа значения, проверки значения на пустоту, преобразования значения в другие типы и другие операции.
42
+ */
43
+ class Value {
44
+ /**
45
+ * Приватное свойство для хранения значения.
46
+ *
47
+ * ### Описание
48
+ *
49
+ * Свойство `#value` используется для хранения значения, переданного при создании экземпляра класса `Value`.
50
+ * Значение не может быть изменено после создания экземпляра класса.
51
+ *
52
+ * @type {any}
53
+ */
54
+ #value;
55
+
56
+ /**
57
+ * Приватное хранилище для кэширования вычисленных значений.
58
+ *
59
+ * ### Описание
60
+ *
61
+ * Свойство `#store` используется для хранения кэшированных значений, которые были вычислены методами класса.
62
+ * Это позволяет избежать повторных вычислений одного и того же значения, что может быть полезно для оптимизации производительности.
63
+ *
64
+ * @type {Object}
65
+ */
66
+ #store = {};
67
+
68
+ /**
69
+ * Создает экземпляр класса `Value` с заданным значением.
70
+ *
71
+ * ### Описание
72
+ *
73
+ * const valueInstance = new Value(obj);
74
+ * // Свойство: #value = { key: 'value' }
75
+ * ```
76
+ *
77
+ * 3. Создание экземпляра класса `Value` с массивом:
78
+ *
79
+ * ```js
80
+ * const arr = [1, 2, 3];
81
+ * const valueInstance = new Value(arr);
82
+ * // Свойство: #value = [1, 2, 3]
83
+ * ```
84
+ *
85
+ * @param {any} value Значение, которое необходимо сохранить в экземпляре класса `Value`.
86
+ */
87
+ constructor(value) {
88
+ this.#value = value;
89
+ }
90
+
91
+ /**
92
+ * Возвращает значение, хранящееся в экземпляре класса `Value`.
93
+ *
94
+ * ### Описание
95
+ *
96
+ * Метод `get` используется для получения значения, переданного при создании экземпляра класса `Value`.
97
+ * Это значение хранится в свойстве `#value` экземпляра и не может быть изменено после создания.
98
+ *
99
+ * ### Возвращаемое значение
100
+ *
101
+ * Возвращает значение, переданное при создании экземпляра класса `Value`.
102
+ *
103
+ * ### Примеры использования
104
+ *
105
+ * 1. Создание экземпляра класса `Value` и получение значения:
106
+ *
107
+ * ```js
108
+ * const valueInstance = new Value(123);
109
+ * const result = valueInstance.get();
110
+ * // Результат: 123
111
+ * ```
112
+ *
113
+ * 2. Создание экземпляра класса `Value` с объектом:
114
+ *
115
+ * ```js
116
+ * const obj = { key: 'value' };
117
+ * const valueInstance = new Value(obj);
118
+ * const result = valueInstance.get();
119
+ * // Результат: { key: 'value' }
120
+ * ```
121
+ *
122
+ * 3. Создание экземпляра класса `Value` с массивом:
123
+ *
124
+ * ```js
125
+ * const arr = [1, 2, 3];
126
+ * const valueInstance = new Value(arr);
127
+ * const result = valueInstance.get();
128
+ * // Результат: [1, 2, 3]
129
+ * ```
130
+ *
131
+ * @returns {any} Возвращает значение, хранящееся в экземпляре класса `Value`.
132
+ */
133
+ get() {
134
+ return this.#value;
135
+ }
136
+
137
+ /**
138
+ * Возвращает тип значения, хранящегося в экземпляре класса `Value`.
139
+ *
140
+ * ### Описание
141
+ *
142
+ * Метод `getType` используется для получения типа значения, переданного при создании экземпляра класса `Value`.
143
+ * Тип значения определяется с помощью функции `gettype`, которая выполняет различные проверки для определения типа.
144
+ *
145
+ * Функция `gettype` выполняет следующие проверки:
146
+ *
147
+ * 1. **Null**: Проверяет, является ли значение `null`.
148
+ * 2. **NaN**: Проверяет, является ли значение `NaN`.
149
+ * 3. **Undefined**: Проверяет, является ли значение `undefined`.
150
+ * 4. **Infinity**: Проверяет, является ли значение бесконечностью.
151
+ * 5. **Boolean**: Проверяет, является ли значение логическим.
152
+ * 6. **Integer**: Проверяет, является ли значение целым числом.
153
+ * 7. **BigInt**: Проверяет, является ли значение типом BigInt.
154
+ * 8. **Float**: Проверяет, является ли значение числом с плавающей точкой.
155
+ * 9. **String**: Проверяет, является ли значение строкой.
156
+ * 10. **Symbol**: Проверяет, является ли значение символом.
157
+ * 11. **Class**: Проверяет, является ли значение классом.
158
+ * 12. **Function**: Проверяет, является ли значение функцией.
159
+ * 13. **Array**: Проверяет, является ли значение массивом.
160
+ * 14. **Object**: Проверяет, является ли значение объектом.
161
+ *
162
+ * Если значение не соответствует ни одному из этих типов, функция возвращает результат `typeof value`.
163
+ *
164
+ * ### Возвращаемое значение
165
+ *
166
+ * Возвращает строку, представляющую тип значения, хранящегося в экземпляре класса `Value`.
167
+ *
168
+ * ### Примеры использования
169
+ *
170
+ * Создание экземпляра класса `Value` и получение типа значения:
171
+ *
172
+ * ```js
173
+ * const valueInstance = new Value(123);
174
+ * const result = valueInstance.getType();
175
+ * // Результат: 'integer'
176
+ * ```
177
+ *
178
+ * @returns {string} Возвращает тип значения, хранящегося в экземпляре класса `Value`.
179
+ */
180
+ getType() {
181
+ return this.#getFromStore('type', () => gettype(this.#value));
182
+ }
183
+
184
+ /**
185
+ * Преобразует значение в экземпляре класса `Value` к указанному типу.
186
+ *
187
+ * ### Описание
188
+ *
189
+ * Метод `setType` используется для преобразования значения, хранящегося в экземпляре класса `Value`, к указанному типу.
190
+ * Поддерживаются типы: `boolean`, `integer`, `float`, `string`, `array`, `object`.
191
+ *
192
+ * Метод использует функцию `settype` для выполнения преобразования.
193
+ *
194
+ * ### Параметры
195
+ *
196
+ * - `type` (string)
197
+ * Тип, к которому необходимо привести значение.
198
+ *
199
+ * ### Возвращаемое значение
200
+ *
201
+ * Возвращает новый экземпляр класса `Value` с преобразованным значением.
202
+ *
203
+ * ### Примеры использования
204
+ *
205
+ * 1. Преобразование в булевое значение:
206
+ *
207
+ * ```js
208
+ * const valueInstance = new Value('true');
209
+ * const result = valueInstance.setType('boolean');
210
+ * // Результат: новый экземпляр класса Value с значением true
211
+ * ```
212
+ *
213
+ * 2. Преобразование в целое число:
214
+ *
215
+ * ```js
216
+ * const valueInstance = new Value('123');
217
+ * const result = valueInstance.setType('integer');
218
+ * // Результат: новый экземпляр класса Value с значением 123
219
+ * ```
220
+ *
221
+ * 3. Преобразование в число с плавающей точкой:
222
+ *
223
+ * ```js
224
+ * const valueInstance = new Value('123.45');
225
+ * const result = valueInstance.setType('float');
226
+ * // Результат: новый экземпляр класса Value с значением 123.45
227
+ * ```
228
+ *
229
+ * 4. Преобразование в строку:
230
+ *
231
+ * ```js
232
+ * const valueInstance = new Value(123);
233
+ * const result = valueInstance.setType('string');
234
+ * // Результат: новый экземпляр класса Value с значением '123'
235
+ * ```
236
+ *
237
+ * 5. Преобразование в массив:
238
+ *
239
+ * ```js
240
+ * const valueInstance = new Value('example');
241
+ * const result = valueInstance.setType('array');
242
+ * // Результат: новый экземпляр класса Value с значением ['example']
243
+ * ```
244
+ *
245
+ * 6. Преобразование в объект:
246
+ *
247
+ * ```js
248
+ * const valueInstance = new Value('example');
249
+ * const result = valueInstance.setType('object');
250
+ * // Результат: новый экземпляр класса Value с значением { value: 'example' }
251
+ * ```
252
+ *
253
+ * @param {string} type Тип, к которому необходимо привести значение.
254
+ * @returns {Value} Возвращает новый экземпляр класса `Value` с преобразованным значением.
255
+ */
256
+ setType(type) {
257
+ return new Value(settype(this.#value, type));
258
+ }
259
+
260
+ /**
261
+ * Проверяет, является ли значение, хранящееся в экземпляре класса `Value`, пустым.
262
+ *
263
+ * ### Описание
264
+ *
265
+ * Метод `isEmpty` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, пустым.
266
+ * Пустыми считаются значения `null`, `undefined`, пустая строка, `0`, `false`, пустой массив и пустой объект.
267
+ *
268
+ * Метод использует функцию `empty` для выполнения проверки.
269
+ *
270
+ * ### Возвращаемое значение
271
+ *
272
+ * Возвращает `true`, если значение пустое, и `false` в противном случае.
273
+ *
274
+ * ### Примеры использования
275
+ *
276
+ * 1. Проверка пустых значений:
277
+ *
278
+ * ```js
279
+ * const valueInstance1 = new Value(null);
280
+ * const result1 = valueInstance1.isEmpty();
281
+ * // Результат: true
282
+ *
283
+ * const valueInstance2 = new Value(undefined);
284
+ * const result2 = valueInstance2.isEmpty();
285
+ * // Результат: true
286
+ *
287
+ * const valueInstance3 = new Value('');
288
+ * const result3 = valueInstance3.isEmpty();
289
+ * // Результат: true
290
+ *
291
+ * const valueInstance4 = new Value(0);
292
+ * const result4 = valueInstance4.isEmpty();
293
+ * // Результат: true
294
+ *
295
+ * const valueInstance5 = new Value(false);
296
+ * const result5 = valueInstance5.isEmpty();
297
+ * // Результат: true
298
+ *
299
+ * const valueInstance6 = new Value([]);
300
+ * const result6 = valueInstance6.isEmpty();
301
+ * // Результат: true
302
+ *
303
+ * const valueInstance7 = new Value({});
304
+ * const result7 = valueInstance7.isEmpty();
305
+ * // Результат: true
306
+ * ```
307
+ *
308
+ * 2. Проверка непустых значений:
309
+ *
310
+ * ```js
311
+ * const valueInstance1 = new Value('example');
312
+ * const result1 = valueInstance1.isEmpty();
313
+ * // Результат: false
314
+ *
315
+ * const valueInstance2 = new Value(123);
316
+ * const result2 = valueInstance2.isEmpty();
317
+ * // Результат: false
318
+ *
319
+ * const valueInstance3 = new Value(true);
320
+ * const result3 = valueInstance3.isEmpty();
321
+ * // Результат: false
322
+ *
323
+ * const valueInstance4 = new Value([1, 2, 3]);
324
+ * const result4 = valueInstance4.isEmpty();
325
+ * // Результат: false
326
+ *
327
+ * const valueInstance5 = new Value({ key: 'value' });
328
+ * const result5 = valueInstance5.isEmpty();
329
+ * // Результат: false
330
+ * ```
331
+ *
332
+ * @returns {boolean} Возвращает `true`, если значение пустое, и `false` в противном случае.
333
+ */
334
+ isEmpty() {
335
+ return this.#getFromStore('isEmpty', () => empty(this.#value));
336
+ }
337
+
338
+ /**
339
+ * Преобразует значение переменной в строку и выводит его на консоль.
340
+ *
341
+ * ### Описание
342
+ *
343
+ * Метод `print` используется для преобразования значения, хранящегося в экземпляре класса `Value`, в строку и вывода его на консоль.
344
+ * Он обрабатывает массивы, объекты, классы, функции, символы и другие типы данных, возвращая их строковое представление.
345
+ *
346
+ * Метод использует функцию `print` для выполнения преобразования и вывода значения на консоль.
347
+ *
348
+ * ### Возвращаемое значение
349
+ *
350
+ * Возвращает текущий экземпляр класса `Value`.
351
+ *
352
+ * ### Примеры использования
353
+ *
354
+ * 1. Преобразование строки:
355
+ *
356
+ * ```js
357
+ * const valueInstance = new Value('example');
358
+ * valueInstance.print();
359
+ * ```
360
+ * Вывод:
361
+ * ```txt
362
+ * "example"
363
+ * ```
364
+ *
365
+ * 2. Преобразование числа:
366
+ *
367
+ * ```js
368
+ * const valueInstance = new Value(123);
369
+ * valueInstance.print();
370
+ * ```
371
+ * Вывод:
372
+ * ```txt
373
+ * 123
374
+ * ```
375
+ *
376
+ * 3. Преобразование булевых значений:
377
+ *
378
+ * ```js
379
+ * const valueInstance = new Value(true);
380
+ * valueInstance.print();
381
+ * ```
382
+ * Вывод:
383
+ * ```txt
384
+ * true
385
+ * ```
386
+ *
387
+ * ```js
388
+ * const valueInstance = new Value(false);
389
+ * valueInstance.print();
390
+ * ```
391
+ * Вывод:
392
+ * ```txt
393
+ * false
394
+ * ```
395
+ *
396
+ * 4. Преобразование null и undefined:
397
+ *
398
+ * ```js
399
+ * const valueInstance = new Value(null);
400
+ * valueInstance.print();
401
+ * ```
402
+ * Вывод:
403
+ * ```txt
404
+ * null
405
+ * ```
406
+ *
407
+ * ```js
408
+ * const valueInstance = new Value(undefined);
409
+ * valueInstance.print();
410
+ * ```
411
+ * Вывод:
412
+ * ```txt
413
+ * undefined
414
+ * ```
415
+ *
416
+ * 5. Преобразование массива:
417
+ *
418
+ * ```js
419
+ * const arr = [1, 2, 3];
420
+ * const valueInstance = new Value(arr);
421
+ * valueInstance.print();
422
+ * ```
423
+ * Вывод:
424
+ * ```txt
425
+ * [
426
+ * 0: 1,
427
+ * 1: 2,
428
+ * 2: 3,
429
+ * ]
430
+ * ```
431
+ *
432
+ * 6. Преобразование ассоциативного массива:
433
+ *
434
+ * ```js
435
+ * const obj = { key: 'value' };
436
+ * const valueInstance = new Value(obj);
437
+ * valueInstance.print();
438
+ * ```
439
+ * Вывод:
440
+ * ```txt
441
+ * {
442
+ * key: "value",
443
+ * }
444
+ * ```
445
+ *
446
+ * 7. Преобразование функции:
447
+ *
448
+ * ```js
449
+ * const func = function() {};
450
+ * const valueInstance = new Value(func);
451
+ * valueInstance.print();
452
+ * ```
453
+ * Вывод:
454
+ * ```txt
455
+ * function func() {}
456
+ * ```
457
+ *
458
+ * 8. Преобразование символа:
459
+ *
460
+ * ```js
461
+ * const symbol = Symbol('example');
462
+ * const valueInstance = new Value(symbol);
463
+ * valueInstance.print();
464
+ * ```
465
+ * Вывод:
466
+ * ```txt
467
+ * Symbol(example)
468
+ * ```
469
+ *
470
+ * @returns {Value} Возвращает текущий экземпляр класса `Value`.
471
+ */
472
+ print() {
473
+ console.log(this.#getFromStore('print', () => print(this.#value, true)));
474
+
475
+ return this;
476
+ }
477
+
478
+ /**
479
+ * Преобразует значение переменной в строку и возвращает новый экземпляр класса `Value` с этим значением.
480
+ *
481
+ * ### Описание
482
+ *
483
+ * Метод `toPrint` используется для преобразования значения, хранящегося в экземпляре класса `Value`, в строку и возвращает новый экземпляр класса `Value` с этим значением.
484
+ * Он обрабатывает массивы, объекты, классы, функции, символы и другие типы данных, возвращая их строковое представление.
485
+ *
486
+ * Метод использует функцию `print` для выполнения преобразования.
487
+ *
488
+ * ### Возвращаемое значение
489
+ *
490
+ * Возвращает новый экземпляр класса `Value` с преобразованным значением.
491
+ *
492
+ * ### Примеры использования
493
+ *
494
+ * 1. Преобразование строки:
495
+ *
496
+ * ```js
497
+ * const valueInstance = new Value('example');
498
+ * const result = valueInstance.toPrint();
499
+ * // Результат: новый экземпляр класса Value с значением "example"
500
+ * ```
501
+ *
502
+ * 2. Преобразование числа:
503
+ *
504
+ * ```js
505
+ * const valueInstance = new Value(123);
506
+ * const result = valueInstance.toPrint();
507
+ * // Результат: новый экземпляр класса Value с значением 123
508
+ * ```
509
+ *
510
+ * 3. Преобразование булевых значений:
511
+ *
512
+ * ```js
513
+ * const valueInstance = new Value(true);
514
+ * const result = valueInstance.toPrint();
515
+ * // Результат: новый экземпляр класса Value с значением true
516
+ * ```
517
+ *
518
+ * ```js
519
+ * const valueInstance = new Value(false);
520
+ * const result = valueInstance.toPrint();
521
+ * // Результат: новый экземпляр класса Value с значением false
522
+ * ```
523
+ *
524
+ * 4. Преобразование null и undefined:
525
+ *
526
+ * ```js
527
+ * const valueInstance = new Value(null);
528
+ * const result = valueInstance.toPrint();
529
+ * // Результат: новый экземпляр класса Value с значением null
530
+ * ```
531
+ *
532
+ * ```js
533
+ * const valueInstance = new Value(undefined);
534
+ * const result = valueInstance.toPrint();
535
+ * // Результат: новый экземпляр класса Value с значением undefined
536
+ * ```
537
+ *
538
+ * 5. Преобразование массива:
539
+ *
540
+ * ```js
541
+ * const arr = [1, 2, 3];
542
+ * const valueInstance = new Value(arr);
543
+ * const result = valueInstance.toPrint();
544
+ * // Результат: новый экземпляр класса Value с значением [
545
+ * // 0: 1,
546
+ * // 1: 2,
547
+ * // 2: 3,
548
+ * // ]
549
+ * ```
550
+ *
551
+ * 6. Преобразование ассоциативного массива:
552
+ *
553
+ * ```js
554
+ * const obj = { key: 'value' };
555
+ * const valueInstance = new Value(obj);
556
+ * const result = valueInstance.toPrint();
557
+ * // Результат: новый экземпляр класса Value с значением {
558
+ * // key: "value",
559
+ * // }
560
+ * ```
561
+ *
562
+ * 7. Преобразование функции:
563
+ *
564
+ * ```js
565
+ * const func = function() {};
566
+ * const valueInstance = new Value(func);
567
+ * const result = valueInstance.toPrint();
568
+ * // Результат: новый экземпляр класса Value с значением function func() {}
569
+ * ```
570
+ *
571
+ * 8. Преобразование символа:
572
+ *
573
+ * ```js
574
+ * const symbol = Symbol('example');
575
+ * const valueInstance = new Value(symbol);
576
+ * const result = valueInstance.toPrint();
577
+ * // Результат: новый экземпляр класса Value с значением Symbol(example)
578
+ * ```
579
+ *
580
+ * @returns {Value} Возвращает новый экземпляр класса `Value` с преобразованным значением.
581
+ */
582
+ toPrint() {
583
+ return new Value(this.#getFromStore('print', () => print(this.#value, true)));
584
+ }
585
+
586
+ /**
587
+ * Преобразует тип значения переменной в строку и выводит его на консоль.
588
+ *
589
+ * ### Описание
590
+ *
591
+ * Метод `printType` используется для преобразования типа значения, хранящегося в экземпляре класса `Value`, в строку и вывода его на консоль.
592
+ * Он обрабатывает массивы, объекты, классы, функции, символы и другие типы данных, возвращая их строковое представление.
593
+ *
594
+ * Метод использует функцию `print_type` для выполнения преобразования и вывода значения на консоль.
595
+ *
596
+ * ### Возвращаемое значение
597
+ *
598
+ * Возвращает текущий экземпляр класса `Value`.
599
+ *
600
+ * ### Примеры использования
601
+ *
602
+ * 1. Преобразование строки:
603
+ *
604
+ * ```js
605
+ * const valueInstance = new Value('example');
606
+ * valueInstance.printType();
607
+ * ```
608
+ * Вывод:
609
+ * ```txt
610
+ * "string"
611
+ * ```
612
+ *
613
+ * 2. Преобразование числа:
614
+ *
615
+ * ```js
616
+ * const valueInstance = new Value(123);
617
+ * valueInstance.printType();
618
+ * ```
619
+ * Вывод:
620
+ * ```txt
621
+ * "integer"
622
+ * ```
623
+ *
624
+ * 3. Преобразование булевых значений:
625
+ *
626
+ * ```js
627
+ * const valueInstance = new Value(true);
628
+ * valueInstance.printType();
629
+ * ```
630
+ * Вывод:
631
+ * ```txt
632
+ * "boolean"
633
+ * ```
634
+ *
635
+ * ```js
636
+ * const valueInstance = new Value(false);
637
+ * valueInstance.printType();
638
+ * ```
639
+ * Вывод:
640
+ * ```txt
641
+ * "boolean"
642
+ * ```
643
+ *
644
+ * 4. Преобразование null и undefined:
645
+ *
646
+ * ```js
647
+ * const valueInstance = new Value(null);
648
+ * valueInstance.printType();
649
+ * ```
650
+ * Вывод:
651
+ * ```txt
652
+ * "null"
653
+ * ```
654
+ *
655
+ * ```js
656
+ * const valueInstance = new Value(undefined);
657
+ * valueInstance.printType();
658
+ * ```
659
+ * Вывод:
660
+ * ```txt
661
+ * "undefined"
662
+ * ```
663
+ *
664
+ * 5. Преобразование массива:
665
+ *
666
+ * ```js
667
+ * const arr = [1, 2, 3];
668
+ * const valueInstance = new Value(arr);
669
+ * valueInstance.printType();
670
+ * ```
671
+ * Вывод:
672
+ * ```txt
673
+ * "array"
674
+ * ```
675
+ *
676
+ * 6. Преобразование ассоциативного массива:
677
+ *
678
+ * ```js
679
+ * const obj = { key: 'value' };
680
+ * const valueInstance = new Value(obj);
681
+ * valueInstance.printType();
682
+ * ```
683
+ * Вывод:
684
+ * ```txt
685
+ * "object"
686
+ * ```
687
+ *
688
+ * 7. Преобразование функции:
689
+ *
690
+ * ```js
691
+ * const func = function() {};
692
+ * const valueInstance = new Value(func);
693
+ * valueInstance.printType();
694
+ * ```
695
+ * Вывод:
696
+ * ```txt
697
+ * "function"
698
+ * ```
699
+ *
700
+ * 8. Преобразование символа:
701
+ *
702
+ * ```js
703
+ * const symbol = Symbol('example');
704
+ * const valueInstance = new Value(symbol);
705
+ * valueInstance.printType();
706
+ * ```
707
+ * Вывод:
708
+ * ```txt
709
+ * "symbol"
710
+ * ```
711
+ *
712
+ * @returns {Value} Возвращает текущий экземпляр класса `Value`.
713
+ */
714
+ printType() {
715
+ console.log(this.#getFromStore('printType', () => print_type(this.#value, true)));
716
+
717
+ return this;
718
+ }
719
+
720
+ /**
721
+ * Преобразует тип значения переменной в строку и возвращает новый экземпляр класса `Value` с этим значением.
722
+ *
723
+ * ### Описание
724
+ *
725
+ * Метод `toPrintType` используется для преобразования типа значения, хранящегося в экземпляре класса `Value`, в строку и возвращает новый экземпляр класса `Value` с этим значением.
726
+ * Он обрабатывает массивы, объекты, классы, функции, символы и другие типы данных, возвращая их строковое представление.
727
+ *
728
+ * Метод использует функцию `print_type` для выполнения преобразования.
729
+ *
730
+ * ### Возвращаемое значение
731
+ *
732
+ * Возвращает новый экземпляр класса `Value` с преобразованным значением.
733
+ *
734
+ * ### Примеры использования
735
+ *
736
+ * 1. Преобразование строки:
737
+ *
738
+ * ```js
739
+ * const valueInstance = new Value('example');
740
+ * const result = valueInstance.toPrintType();
741
+ * // Результат: новый экземпляр класса Value с значением "string"
742
+ * ```
743
+ *
744
+ * 2. Преобразование числа:
745
+ *
746
+ * ```js
747
+ * const valueInstance = new Value(123);
748
+ * const result = valueInstance.toPrintType();
749
+ * // Результат: новый экземпляр класса Value с значением "integer"
750
+ * ```
751
+ *
752
+ * 3. Преобразование булевых значений:
753
+ *
754
+ * ```js
755
+ * const valueInstance = new Value(true);
756
+ * const result = valueInstance.toPrintType();
757
+ * // Результат: новый экземпляр класса Value с значением "boolean"
758
+ * ```
759
+ *
760
+ * ```js
761
+ * const valueInstance = new Value(false);
762
+ * const result = valueInstance.toPrintType();
763
+ * // Результат: новый экземпляр класса Value с значением "boolean"
764
+ * ```
765
+ *
766
+ * 4. Преобразование null и undefined:
767
+ *
768
+ * ```js
769
+ * const valueInstance = new Value(null);
770
+ * const result = valueInstance.toPrintType();
771
+ * // Результат: новый экземпляр класса Value с значением "null"
772
+ * ```
773
+ *
774
+ * ```js
775
+ * const valueInstance = new Value(undefined);
776
+ * const result = valueInstance.toPrintType();
777
+ * // Результат: новый экземпляр класса Value с значением "undefined"
778
+ * ```
779
+ *
780
+ * 5. Преобразование массива:
781
+ *
782
+ * ```js
783
+ * const arr = [1, 2, 3];
784
+ * const valueInstance = new Value(arr);
785
+ * const result = valueInstance.toPrintType();
786
+ * // Результат: новый экземпляр класса Value с значением "array"
787
+ * ```
788
+ *
789
+ * 6. Преобразование ассоциативного массива:
790
+ *
791
+ * ```js
792
+ * const obj = { key: 'value' };
793
+ * const valueInstance = new Value(obj);
794
+ * const result = valueInstance.toPrintType();
795
+ * // Результат: новый экземпляр класса Value с значением "object"
796
+ * ```
797
+ *
798
+ * 7. Преобразование функции:
799
+ *
800
+ * ```js
801
+ * const func = function() {};
802
+ * const valueInstance = new Value(func);
803
+ * const result = valueInstance.toPrintType();
804
+ * // Результат: новый экземпляр класса Value с значением "function"
805
+ * ```
806
+ *
807
+ * 8. Преобразование символа:
808
+ *
809
+ * ```js
810
+ * const symbol = Symbol('example');
811
+ * const valueInstance = new Value(symbol);
812
+ * const result = valueInstance.toPrintType();
813
+ * // Результат: новый экземпляр класса Value с значением "symbol"
814
+ * ```
815
+ *
816
+ * @returns {Value} Возвращает новый экземпляр класса `Value` с преобразованным значением.
817
+ */
818
+ toPrintType() {
819
+ return new Value(this.#getFromStore('printType', () => print_type(this.#value, true)));
820
+ }
821
+
822
+ /**
823
+ * Проверяет, является ли значение массивом.
824
+ *
825
+ * ### Описание
826
+ *
827
+ * Метод `isArray` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, массивом.
828
+ * Массивом считается значение, которое является экземпляром класса `Array`.
829
+ *
830
+ * Метод использует функцию `is_array` для выполнения проверки.
831
+ *
832
+ * ### Возвращаемое значение
833
+ *
834
+ * Возвращает `true`, если значение является массивом, и `false` в противном случае.
835
+ *
836
+ * ### Примеры использования
837
+ *
838
+ * 1. Проверка массива:
839
+ *
840
+ * ```js
841
+ * const valueInstance = new Value([1, 2, 3]);
842
+ * const result = valueInstance.isArray();
843
+ * // Результат: true
844
+ * ```
845
+ *
846
+ * 2. Проверка объекта:
847
+ *
848
+ * ```js
849
+ * const valueInstance = new Value({ key: 'value' });
850
+ * const result = valueInstance.isArray();
851
+ * // Результат: false
852
+ * ```
853
+ *
854
+ * 3. Проверка строки:
855
+ *
856
+ * ```js
857
+ * const valueInstance = new Value('example');
858
+ * const result = valueInstance.isArray();
859
+ * // Результат: false
860
+ * ```
861
+ *
862
+ * 4. Проверка числа:
863
+ *
864
+ * ```js
865
+ * const valueInstance = new Value(123);
866
+ * const result = valueInstance.isArray();
867
+ * // Результат: false
868
+ * ```
869
+ *
870
+ * 5. Проверка булевого значения:
871
+ *
872
+ * ```js
873
+ * const valueInstance = new Value(true);
874
+ * const result = valueInstance.isArray();
875
+ * // Результат: false
876
+ * ```
877
+ *
878
+ * @returns {boolean} Возвращает `true`, если значение является массивом, и `false` в противном случае.
879
+ */
880
+ isArray() {
881
+ return this.#getFromStore('isArray', () => is_array(this.#value));
882
+ }
883
+
884
+ /**
885
+ * Проверяет, является ли значение ассоциативным массивом.
886
+ *
887
+ * ### Описание
888
+ *
889
+ * Метод `isAssoc` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, ассоциативным массивом.
890
+ * Ассоциативным массивом считается объект, который не является массивом и не является `null`.
891
+ *
892
+ * Метод использует функцию `is_assoc` для выполнения проверки.
893
+ *
894
+ * ### Возвращаемое значение
895
+ *
896
+ * Возвращает `true`, если значение является ассоциативным массивом, и `false` в противном случае.
897
+ *
898
+ * ### Примеры использования
899
+ *
900
+ * 1. Проверка ассоциативного массива:
901
+ *
902
+ * ```js
903
+ * const valueInstance = new Value({ key: 'value' });
904
+ * const result = valueInstance.isAssoc();
905
+ * // Результат: true
906
+ * ```
907
+ *
908
+ * 2. Проверка массива:
909
+ *
910
+ * ```js
911
+ * const valueInstance = new Value([1, 2, 3]);
912
+ * const result = valueInstance.isAssoc();
913
+ * // Результат: false
914
+ * ```
915
+ *
916
+ * 3. Проверка null:
917
+ *
918
+ * ```js
919
+ * const valueInstance = new Value(null);
920
+ * const result = valueInstance.isAssoc();
921
+ * // Результат: false
922
+ * ```
923
+ *
924
+ * @returns {boolean} Возвращает `true`, если значение является ассоциативным массивом, и `false` в противном случае.
925
+ */
926
+ isAssoc() {
927
+ return this.#getFromStore('isAssoc', () => is_assoc(this.#value));
928
+ }
929
+
930
+ /**
931
+ * Проверяет, является ли значение типом BigInt.
932
+ *
933
+ * ### Описание
934
+ *
935
+ * Метод `isBigInt` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, типом BigInt.
936
+ * BigInt - это встроенный тип данных в JavaScript, который используется для представления целых чисел произвольной длины.
937
+ *
938
+ * Метод использует функцию `is_bigint` для выполнения проверки.
939
+ *
940
+ * ### Возвращаемое значение
941
+ *
942
+ * Возвращает `true`, если значение является типом BigInt, и `false` в противном случае.
943
+ *
944
+ * ### Примеры использования
945
+ *
946
+ * 1. Проверка значения типа BigInt:
947
+ *
948
+ * ```js
949
+ * const valueInstance = new Value(123n);
950
+ * const result = valueInstance.isBigInt();
951
+ * // Результат: true
952
+ * ```
953
+ *
954
+ * 2. Проверка значения типа Number:
955
+ *
956
+ * ```js
957
+ * const valueInstance = new Value(123);
958
+ * const result = valueInstance.isBigInt();
959
+ * // Результат: false
960
+ * ```
961
+ *
962
+ * 3. Проверка строки:
963
+ *
964
+ * ```js
965
+ * const valueInstance = new Value('123');
966
+ * const result = valueInstance.isBigInt();
967
+ * // Результат: false
968
+ * ```
969
+ *
970
+ * @returns {boolean} Возвращает `true`, если значение является типом BigInt, и `false` в противном случае.
971
+ */
972
+ isBigInt() {
973
+ return this.#getFromStore('isBigInt', () => is_bigint(this.#value));
974
+ }
975
+
976
+ /**
977
+ * Проверяет, является ли значение логическим (булевым).
978
+ *
979
+ * ### Описание
980
+ *
981
+ * Метод `isBool` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, логическим (булевым).
982
+ * Логическим значением считается значение, которое является `true` или `false`.
983
+ *
984
+ * Метод использует функцию `is_bool` для выполнения проверки.
985
+ *
986
+ * ### Возвращаемое значение
987
+ *
988
+ * Возвращает `true`, если значение является логическим, и `false` в противном случае.
989
+ *
990
+ * ### Примеры использования
991
+ *
992
+ * 1. Проверка значения `true`:
993
+ *
994
+ * ```js
995
+ * const valueInstance = new Value(true);
996
+ * const result = valueInstance.isBool();
997
+ * // Результат: true
998
+ * ```
999
+ *
1000
+ * 2. Проверка значения `false`:
1001
+ *
1002
+ * ```js
1003
+ * const valueInstance = new Value(false);
1004
+ * const result = valueInstance.isBool();
1005
+ * // Результат: true
1006
+ * ```
1007
+ *
1008
+ * 3. Проверка строки:
1009
+ *
1010
+ * ```js
1011
+ * const valueInstance = new Value('true');
1012
+ * const result = valueInstance.isBool();
1013
+ * // Результат: false
1014
+ * ```
1015
+ *
1016
+ * 4. Проверка числа:
1017
+ *
1018
+ * ```js
1019
+ * const valueInstance = new Value(1);
1020
+ * const result = valueInstance.isBool();
1021
+ * // Результат: false
1022
+ * ```
1023
+ *
1024
+ * @returns {boolean} Возвращает `true`, если значение является логическим, и `false` в противном случае.
1025
+ */
1026
+ isBool() {
1027
+ return this.#getFromStore('isBool', () => is_bool(this.#value));
1028
+ }
1029
+
1030
+ /**
1031
+ * Проверяет, является ли значение логическим (булевым).
1032
+ *
1033
+ * ### Описание
1034
+ *
1035
+ * Метод `isBoolean` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, логическим (булевым).
1036
+ * Логическим значением считается значение, которое является `true` или `false`.
1037
+ *
1038
+ * Метод использует функцию `is_bool` для выполнения проверки.
1039
+ *
1040
+ * ### Возвращаемое значение
1041
+ *
1042
+ * Возвращает `true`, если значение является логическим, и `false` в противном случае.
1043
+ *
1044
+ * ### Примеры использования
1045
+ *
1046
+ * 1. Проверка значения `true`:
1047
+ *
1048
+ * ```js
1049
+ * const valueInstance = new Value(true);
1050
+ * const result = valueInstance.isBoolean();
1051
+ * // Результат: true
1052
+ * ```
1053
+ *
1054
+ * 2. Проверка значения `false`:
1055
+ *
1056
+ * ```js
1057
+ * const valueInstance = new Value(false);
1058
+ * const result = valueInstance.isBoolean();
1059
+ * // Результат: true
1060
+ * ```
1061
+ *
1062
+ * 3. Проверка строки:
1063
+ *
1064
+ * ```js
1065
+ * const valueInstance = new Value('true');
1066
+ * const result = valueInstance.isBoolean();
1067
+ * // Результат: false
1068
+ * ```
1069
+ *
1070
+ * 4. Проверка числа:
1071
+ *
1072
+ * ```js
1073
+ * const valueInstance = new Value(1);
1074
+ * const result = valueInstance.isBoolean();
1075
+ * // Результат: false
1076
+ * ```
1077
+ *
1078
+ * @returns {boolean} Возвращает `true`, если значение является логическим, и `false` в противном случае.
1079
+ */
1080
+ isBoolean() {
1081
+ return this.#getFromStore('isBool', () => is_bool(this.#value));
1082
+ }
1083
+
1084
+ /**
1085
+ * Проверяет, является ли значение классом.
1086
+ *
1087
+ * ### Описание
1088
+ *
1089
+ * Метод `isClass` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, классом.
1090
+ * Классом считается значение, которое является функцией и имеет свойство `prototype`, являющееся объектом.
1091
+ *
1092
+ * Метод использует функцию `is_class` для выполнения проверки.
1093
+ *
1094
+ * ### Возвращаемое значение
1095
+ *
1096
+ * Возвращает `true`, если значение является классом, и `false` в противном случае.
1097
+ *
1098
+ * ### Примеры использования
1099
+ *
1100
+ * 1. Проверка класса:
1101
+ *
1102
+ * ```js
1103
+ * class MyClass {}
1104
+ * const valueInstance = new Value(MyClass);
1105
+ * const result = valueInstance.isClass();
1106
+ * // Результат: true
1107
+ * ```
1108
+ *
1109
+ * 2. Проверка функции:
1110
+ *
1111
+ * ```js
1112
+ * const myFunction = function() {};
1113
+ * const valueInstance = new Value(myFunction);
1114
+ * const result = valueInstance.isClass();
1115
+ * // Результат: false
1116
+ * ```
1117
+ *
1118
+ * 3. Проверка объекта:
1119
+ *
1120
+ * ```js
1121
+ * const myObject = {};
1122
+ * const valueInstance = new Value(myObject);
1123
+ * const result = valueInstance.isClass();
1124
+ * // Результат: false
1125
+ * ```
1126
+ *
1127
+ * @returns {boolean} Возвращает `true`, если значение является классом, и `false` в противном случае.
1128
+ */
1129
+ isClass() {
1130
+ return this.#getFromStore('isClass', () => is_class(this.#value));
1131
+ }
1132
+
1133
+ /**
1134
+ * Проверяет, является ли значение числом с плавающей точкой.
1135
+ *
1136
+ * ### Описание
1137
+ *
1138
+ * Метод `isFloat` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, числом с плавающей точкой.
1139
+ * Числом с плавающей точкой считается значение, которое является числом и не является целым числом.
1140
+ *
1141
+ * Метод использует функцию `is_float` для выполнения проверки.
1142
+ *
1143
+ * ### Возвращаемое значение
1144
+ *
1145
+ * Возвращает `true`, если значение является числом с плавающей точкой, и `false` в противном случае.
1146
+ *
1147
+ * ### Примеры использования
1148
+ *
1149
+ * 1. Проверка числа с плавающей точкой:
1150
+ *
1151
+ * ```js
1152
+ * const valueInstance = new Value(123.45);
1153
+ * const result = valueInstance.isFloat();
1154
+ * // Результат: true
1155
+ * ```
1156
+ *
1157
+ * 2. Проверка целого числа:
1158
+ *
1159
+ * ```js
1160
+ * const valueInstance = new Value(123);
1161
+ * const result = valueInstance.isFloat();
1162
+ * // Результат: false
1163
+ * ```
1164
+ *
1165
+ * 3. Проверка строки:
1166
+ *
1167
+ * ```js
1168
+ * const valueInstance = new Value('123.45');
1169
+ * const result = valueInstance.isFloat();
1170
+ * // Результат: false
1171
+ * ```
1172
+ *
1173
+ * @returns {boolean} Возвращает `true`, если значение является числом с плавающей точкой, и `false` в противном случае.
1174
+ */
1175
+ isFloat() {
1176
+ return this.#getFromStore('isFloat', () => is_float(this.#value));
1177
+ }
1178
+
1179
+ /**
1180
+ * Проверяет, является ли значение функцией.
1181
+ *
1182
+ * ### Описание
1183
+ *
1184
+ * Метод `isFunction` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, функцией.
1185
+ * Функцией считается значение, которое является экземпляром класса `Function`.
1186
+ *
1187
+ * Метод использует функцию `is_function` для выполнения проверки.
1188
+ *
1189
+ * ### Возвращаемое значение
1190
+ *
1191
+ * Возвращает `true`, если значение является функцией, и `false` в противном случае.
1192
+ *
1193
+ * ### Примеры использования
1194
+ *
1195
+ * 1. Проверка функции:
1196
+ *
1197
+ * ```js
1198
+ * const valueInstance = new Value(function() {});
1199
+ * const result = valueInstance.isFunction();
1200
+ * // Результат: true
1201
+ * ```
1202
+ *
1203
+ * 2. Проверка стрелочной функции:
1204
+ *
1205
+ * ```js
1206
+ * const valueInstance = new Value(() => {});
1207
+ * const result = valueInstance.isFunction();
1208
+ * // Результат: true
1209
+ * ```
1210
+ *
1211
+ * 3. Проверка класса:
1212
+ *
1213
+ * ```js
1214
+ * class MyClass {}
1215
+ * const valueInstance = new Value(MyClass);
1216
+ * const result = valueInstance.isFunction();
1217
+ * // Результат: false
1218
+ * ```
1219
+ *
1220
+ * 4. Проверка объекта:
1221
+ *
1222
+ * ```js
1223
+ * const valueInstance = new Value({});
1224
+ * const result = valueInstance.isFunction();
1225
+ * // Результат: false
1226
+ * ```
1227
+ *
1228
+ * @returns {boolean} Возвращает `true`, если значение является функцией, и `false` в противном случае.
1229
+ */
1230
+ isFunction() {
1231
+ return this.#getFromStore('isFunction', () => is_function(this.#value));
1232
+ }
1233
+
1234
+ /**
1235
+ * Проверяет, является ли значение бесконечностью.
1236
+ *
1237
+ * ### Описание
1238
+ *
1239
+ * Метод `isInfinity` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, бесконечностью.
1240
+ * Значение считается бесконечностью, если оно равно `Infinity` или `-Infinity`.
1241
+ *
1242
+ * Метод использует функцию `is_infinity` для выполнения проверки.
1243
+ *
1244
+ * ### Возвращаемое значение
1245
+ *
1246
+ * Возвращает `true`, если значение является бесконечностью, и `false` в противном случае.
1247
+ *
1248
+ * ### Примеры использования
1249
+ *
1250
+ * 1. Проверка значения `Infinity`:
1251
+ *
1252
+ * ```js
1253
+ * const valueInstance = new Value(Infinity);
1254
+ * const result = valueInstance.isInfinity();
1255
+ * // Результат: true
1256
+ * ```
1257
+ *
1258
+ * 2. Проверка значения `-Infinity`:
1259
+ *
1260
+ * ```js
1261
+ * const valueInstance = new Value(-Infinity);
1262
+ * const result = valueInstance.isInfinity();
1263
+ * // Результат: true
1264
+ * ```
1265
+ *
1266
+ * 3. Проверка значения `123`:
1267
+ *
1268
+ * ```js
1269
+ * const valueInstance = new Value(123);
1270
+ * const result = valueInstance.isInfinity();
1271
+ * // Результат: false
1272
+ * ```
1273
+ *
1274
+ * 4. Проверка значения `NaN`:
1275
+ *
1276
+ * ```js
1277
+ * const valueInstance = new Value(NaN);
1278
+ * const result = valueInstance.isInfinity();
1279
+ * // Результат: false
1280
+ * ```
1281
+ *
1282
+ * @returns {boolean} Возвращает `true`, если значение является бесконечностью, и `false` в противном случае.
1283
+ */
1284
+ isInfinity() {
1285
+ return this.#getFromStore('isInfinity', () => is_infinity(this.#value));
1286
+ }
1287
+
1288
+ /**
1289
+ * Проверяет, является ли значение целым числом.
1290
+ *
1291
+ * ### Описание
1292
+ *
1293
+ * Метод `isInt` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, целым числом.
1294
+ * Целым числом считается значение, которое имеет тип `number`, является конечным и не имеет дробной части.
1295
+ *
1296
+ * Метод использует функцию `is_int` для выполнения проверки.
1297
+ *
1298
+ * ### Возвращаемое значение
1299
+ *
1300
+ * Возвращает `true`, если значение является целым числом, и `false` в противном случае.
1301
+ *
1302
+ * ### Примеры использования
1303
+ *
1304
+ * 1. Проверка целого числа:
1305
+ *
1306
+ * ```js
1307
+ * const valueInstance = new Value(123);
1308
+ * const result = valueInstance.isInt();
1309
+ * // Результат: true
1310
+ * ```
1311
+ *
1312
+ * 2. Проверка числа с плавающей точкой:
1313
+ *
1314
+ * ```js
1315
+ * const valueInstance = new Value(123.45);
1316
+ * const result = valueInstance.isInt();
1317
+ * // Результат: false
1318
+ * ```
1319
+ *
1320
+ * 3. Проверка строки:
1321
+ *
1322
+ * ```js
1323
+ * const valueInstance = new Value('123');
1324
+ * const result = valueInstance.isInt();
1325
+ * // Результат: false
1326
+ * ```
1327
+ *
1328
+ * @returns {boolean} Возвращает `true`, если значение является целым числом, и `false` в противном случае.
1329
+ */
1330
+ isInt() {
1331
+ return this.#getFromStore('isInt', () => is_int(this.#value));
1332
+ }
1333
+
1334
+ /**
1335
+ * Проверяет, является ли значение целым числом.
1336
+ *
1337
+ * ### Описание
1338
+ *
1339
+ * Метод `isInteger` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, целым числом.
1340
+ * Целым числом считается значение, которое имеет тип `number`, является конечным и не имеет дробной части.
1341
+ *
1342
+ * Метод использует функцию `is_int` для выполнения проверки.
1343
+ *
1344
+ * ### Возвращаемое значение
1345
+ *
1346
+ * Возвращает `true`, если значение является целым числом, и `false` в противном случае.
1347
+ *
1348
+ * ### Примеры использования
1349
+ *
1350
+ * 1. Проверка целого числа:
1351
+ *
1352
+ * ```js
1353
+ * const valueInstance = new Value(123);
1354
+ * const result = valueInstance.isInteger();
1355
+ * // Результат: true
1356
+ * ```
1357
+ *
1358
+ * 2. Проверка числа с плавающей точкой:
1359
+ *
1360
+ * ```js
1361
+ * const valueInstance = new Value(123.45);
1362
+ * const result = valueInstance.isInteger();
1363
+ * // Результат: false
1364
+ * ```
1365
+ *
1366
+ * 3. Проверка строки:
1367
+ *
1368
+ * ```js
1369
+ * const valueInstance = new Value('123');
1370
+ * const result = valueInstance.isInteger();
1371
+ * // Результат: false
1372
+ * ```
1373
+ *
1374
+ * @returns {boolean} Возвращает `true`, если значение является целым числом, и `false` в противном случае.
1375
+ */
1376
+ isInteger() {
1377
+ return this.#getFromStore('isInt', () => is_int(this.#value));
1378
+ }
1379
+
1380
+ /**
1381
+ * Проверяет, является ли значение списком.
1382
+ *
1383
+ * ### Описание
1384
+ *
1385
+ * Метод `isList` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, списком.
1386
+ * Списком считается значение, которое является массивом.
1387
+ *
1388
+ * Метод использует функцию `is_list` для выполнения проверки.
1389
+ *
1390
+ * ### Возвращаемое значение
1391
+ *
1392
+ * Возвращает `true`, если значение является списком, и `false` в противном случае.
1393
+ *
1394
+ * ### Примеры использования
1395
+ *
1396
+ * 1. Проверка массивов:
1397
+ *
1398
+ * ```js
1399
+ * const valueInstance = new Value([1, 2, 3]);
1400
+ * const result = valueInstance.isList();
1401
+ * // Результат: true
1402
+ * ```
1403
+ *
1404
+ * 2. Проверка значений других типов:
1405
+ *
1406
+ * ```js
1407
+ * const valueInstance = new Value({});
1408
+ * const result = valueInstance.isList();
1409
+ * // Результат: false
1410
+ *
1411
+ * const valueInstance2 = new Value('string');
1412
+ * const result2 = valueInstance2.isList();
1413
+ * // Результат: false
1414
+ *
1415
+ * const valueInstance3 = new Value(42);
1416
+ * const result3 = valueInstance3.isList();
1417
+ * // Результат: false
1418
+ *
1419
+ * const valueInstance4 = new Value(null);
1420
+ * const result4 = valueInstance4.isList();
1421
+ * // Результат: false
1422
+ *
1423
+ * const valueInstance5 = new Value(undefined);
1424
+ * const result5 = valueInstance5.isList();
1425
+ * // Результат: false
1426
+ * ```
1427
+ *
1428
+ * @returns {boolean} Возвращает `true`, если значение является списком, и `false` в противном случае.
1429
+ */
1430
+ isList() {
1431
+ return this.#getFromStore('isList', () => is_list(this.#value));
1432
+ }
1433
+
1434
+ /**
1435
+ * Проверяет, является ли значение NaN.
1436
+ *
1437
+ * ### Описание
1438
+ *
1439
+ * Метод `isNaN` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, NaN (Not-a-Number).
1440
+ *
1441
+ * Метод использует функцию `is_nan` для выполнения проверки.
1442
+ *
1443
+ * ### Возвращаемое значение
1444
+ *
1445
+ * Возвращает `true`, если значение является NaN, и `false` в противном случае.
1446
+ *
1447
+ * ### Примеры использования
1448
+ *
1449
+ * 1. Проверка значения NaN:
1450
+ *
1451
+ * ```js
1452
+ * const valueInstance = new Value(NaN);
1453
+ * const result = valueInstance.isNaN();
1454
+ * // Результат: true
1455
+ * ```
1456
+ *
1457
+ * 2. Проверка числовых значений:
1458
+ *
1459
+ * ```js
1460
+ * const valueInstance = new Value(42);
1461
+ * const result = valueInstance.isNaN();
1462
+ * // Результат: false
1463
+ *
1464
+ * const valueInstance2 = new Value(3.14);
1465
+ * const result2 = valueInstance2.isNaN();
1466
+ * // Результат: false
1467
+ *
1468
+ * const valueInstance3 = new Value(Infinity);
1469
+ * const result3 = valueInstance3.isNaN();
1470
+ * // Результат: false
1471
+ * ```
1472
+ *
1473
+ * 3. Проверка значений других типов:
1474
+ *
1475
+ * ```js
1476
+ * const valueInstance = new Value('42');
1477
+ * const result = valueInstance.isNaN();
1478
+ * // Результат: false
1479
+ *
1480
+ * const valueInstance2 = new Value(true);
1481
+ * const result2 = valueInstance2.isNaN();
1482
+ * // Результат: false
1483
+ *
1484
+ * const valueInstance3 = new Value(null);
1485
+ * const result3 = valueInstance3.isNaN();
1486
+ * // Результат: false
1487
+ *
1488
+ * const valueInstance4 = new Value(undefined);
1489
+ * const result4 = valueInstance4.isNaN();
1490
+ * // Результат: false
1491
+ *
1492
+ * const valueInstance5 = new Value({});
1493
+ * const result5 = valueInstance5.isNaN();
1494
+ * // Результат: false
1495
+ *
1496
+ * const valueInstance6 = new Value([]);
1497
+ * const result6 = valueInstance6.isNaN();
1498
+ * // Результат: false
1499
+ * ```
1500
+ *
1501
+ * @returns {boolean} Возвращает `true`, если значение является NaN, и `false` в противном случае.
1502
+ */
1503
+ isNaN() {
1504
+ return this.#getFromStore('isNaN', () => is_nan(this.#value));
1505
+ }
1506
+
1507
+ /**
1508
+ * Проверяет, является ли значение null.
1509
+ *
1510
+ * ### Описание
1511
+ *
1512
+ * Метод `isNull` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, null.
1513
+ * Значение считается null, если оно строго равно null.
1514
+ *
1515
+ * Метод использует функцию `is_null` для выполнения проверки.
1516
+ *
1517
+ * ### Возвращаемое значение
1518
+ *
1519
+ * Возвращает `true`, если значение является null, и `false` в противном случае.
1520
+ *
1521
+ * ### Примеры использования
1522
+ *
1523
+ * 1. Проверка значения null:
1524
+ *
1525
+ * ```js
1526
+ * const valueInstance = new Value(null);
1527
+ * const result = valueInstance.isNull();
1528
+ * // Результат: true
1529
+ * ```
1530
+ *
1531
+ * 2. Проверка значения undefined:
1532
+ *
1533
+ * ```js
1534
+ * const valueInstance = new Value(undefined);
1535
+ * const result = valueInstance.isNull();
1536
+ * // Результат: false
1537
+ * ```
1538
+ *
1539
+ * 3. Проверка значения 0:
1540
+ *
1541
+ * ```js
1542
+ * const valueInstance = new Value(0);
1543
+ * const result = valueInstance.isNull();
1544
+ * // Результат: false
1545
+ * ```
1546
+ *
1547
+ * 4. Проверка значения пустой строки:
1548
+ *
1549
+ * ```js
1550
+ * const valueInstance = new Value('');
1551
+ * const result = valueInstance.isNull();
1552
+ * // Результат: false
1553
+ * ```
1554
+ *
1555
+ * @returns {boolean} Возвращает `true`, если значение является null, и `false` в противном случае.
1556
+ */
1557
+ isNull() {
1558
+ return this.#getFromStore('isNull', () => is_null(this.#value));
1559
+ }
1560
+
1561
+ /**
1562
+ * Проверяет, является ли значение числом.
1563
+ *
1564
+ * ### Описание
1565
+ *
1566
+ * Метод `isNumber` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, числом.
1567
+ * Метод использует оператор `typeof` для проверки типа значения и убеждается, что значение не является `Infinity` или `NaN`.
1568
+ *
1569
+ * Метод использует функцию `is_number` для выполнения проверки.
1570
+ *
1571
+ * ### Возвращаемое значение
1572
+ *
1573
+ * Возвращает `true`, если значение является числом, и `false` в противном случае.
1574
+ *
1575
+ * ### Примеры использования
1576
+ *
1577
+ * 1. Проверка числовых значений:
1578
+ *
1579
+ * ```js
1580
+ * const valueInstance = new Value(42);
1581
+ * const result = valueInstance.isNumber();
1582
+ * // Результат: true
1583
+ *
1584
+ * const valueInstance2 = new Value(3.14);
1585
+ * const result2 = valueInstance2.isNumber();
1586
+ * // Результат: true
1587
+ * ```
1588
+ *
1589
+ * 2. Проверка специальных числовых значений:
1590
+ *
1591
+ * ```js
1592
+ * const valueInstance = new Value(NaN);
1593
+ * const result = valueInstance.isNumber();
1594
+ * // Результат: false
1595
+ *
1596
+ * const valueInstance2 = new Value(Infinity);
1597
+ * const result2 = valueInstance2.isNumber();
1598
+ * // Результат: false
1599
+ * ```
1600
+ *
1601
+ * 3. Проверка значений других типов:
1602
+ *
1603
+ * ```js
1604
+ * const valueInstance = new Value('42');
1605
+ * const result = valueInstance.isNumber();
1606
+ * // Результат: false
1607
+ *
1608
+ * const valueInstance2 = new Value(true);
1609
+ * const result2 = valueInstance2.isNumber();
1610
+ * // Результат: false
1611
+ *
1612
+ * const valueInstance3 = new Value(null);
1613
+ * const result3 = valueInstance3.isNumber();
1614
+ * // Результат: false
1615
+ *
1616
+ * const valueInstance4 = new Value(undefined);
1617
+ * const result4 = valueInstance4.isNumber();
1618
+ * // Результат: false
1619
+ *
1620
+ * const valueInstance5 = new Value({});
1621
+ * const result5 = valueInstance5.isNumber();
1622
+ * // Результат: false
1623
+ *
1624
+ * const valueInstance6 = new Value([]);
1625
+ * const result6 = valueInstance6.isNumber();
1626
+ * // Результат: false
1627
+ * ```
1628
+ *
1629
+ * @returns {boolean} Возвращает `true`, если значение является числом, и `false` в противном случае.
1630
+ */
1631
+ isNumber() {
1632
+ return this.#getFromStore('isNumber', () => is_number(this.#value));
1633
+ }
1634
+
1635
+ /**
1636
+ * Проверяет, является ли значение числом или числовой строкой.
1637
+ *
1638
+ * ### Описание
1639
+ *
1640
+ * Метод `isNumeric` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, числом или строкой, которая может быть преобразована в число.
1641
+ *
1642
+ * Метод использует функцию `is_numeric` для выполнения проверки.
1643
+ *
1644
+ * ### Возвращаемое значение
1645
+ *
1646
+ * Возвращает `true`, если значение является числом или числовой строкой, и `false` в противном случае.
1647
+ *
1648
+ * ### Примеры использования
1649
+ *
1650
+ * 1. Проверка числовых значений:
1651
+ *
1652
+ * ```js
1653
+ * const valueInstance = new Value(42);
1654
+ * const result = valueInstance.isNumeric();
1655
+ * // Результат: true
1656
+ *
1657
+ * const valueInstance2 = new Value(3.14);
1658
+ * const result2 = valueInstance2.isNumeric();
1659
+ * // Результат: true
1660
+ * ```
1661
+ *
1662
+ * 2. Проверка числовых строк:
1663
+ *
1664
+ * ```js
1665
+ * const valueInstance = new Value('42');
1666
+ * const result = valueInstance.isNumeric();
1667
+ * // Результат: true
1668
+ *
1669
+ * const valueInstance2 = new Value('3.14');
1670
+ * const result2 = valueInstance2.isNumeric();
1671
+ * // Результат: true
1672
+ * ```
1673
+ *
1674
+ * 3. Проверка значений других типов:
1675
+ *
1676
+ * ```js
1677
+ * const valueInstance = new Value(true);
1678
+ * const result = valueInstance.isNumeric();
1679
+ * // Результат: false
1680
+ *
1681
+ * const valueInstance2 = new Value(null);
1682
+ * const result2 = valueInstance2.isNumeric();
1683
+ * // Результат: false
1684
+ *
1685
+ * const valueInstance3 = new Value(undefined);
1686
+ * const result3 = valueInstance3.isNumeric();
1687
+ * // Результат: false
1688
+ *
1689
+ * const valueInstance4 = new Value({});
1690
+ * const result4 = valueInstance4.isNumeric();
1691
+ * // Результат: false
1692
+ *
1693
+ * const valueInstance5 = new Value([]);
1694
+ * const result5 = valueInstance5.isNumeric();
1695
+ * // Результат: false
1696
+ *
1697
+ * const valueInstance6 = new Value('hello');
1698
+ * const result6 = valueInstance6.isNumeric();
1699
+ * // Результат: false
1700
+ * ```
1701
+ *
1702
+ * @returns {boolean} Возвращает `true`, если значение является числом или числовой строкой, и `false` в противном случае.
1703
+ */
1704
+ isNumeric() {
1705
+ return this.#getFromStore('isNumeric', () => is_numeric(this.#value));
1706
+ }
1707
+
1708
+ /**
1709
+ * Проверяет, является ли значение объектом.
1710
+ *
1711
+ * ### Описание
1712
+ *
1713
+ * Метод `isObject` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, объектом.
1714
+ * Метод использует оператор `typeof` для проверки типа значения и убеждается, что значение не является `null`.
1715
+ *
1716
+ * Метод использует функцию `is_object` для выполнения проверки.
1717
+ *
1718
+ * ### Возвращаемое значение
1719
+ *
1720
+ * Возвращает `true`, если значение является объектом, и `false` в противном случае.
1721
+ *
1722
+ * ### Примеры использования
1723
+ *
1724
+ * 1. Проверка объектов:
1725
+ *
1726
+ * ```js
1727
+ * const valueInstance = new Value({});
1728
+ * const result = valueInstance.isObject();
1729
+ * // Результат: true
1730
+ *
1731
+ * const valueInstance2 = new Value({ key: 'value' });
1732
+ * const result2 = valueInstance2.isObject();
1733
+ * // Результат: true
1734
+ * ```
1735
+ *
1736
+ * 2. Проверка значений других типов:
1737
+ *
1738
+ * ```js
1739
+ * const valueInstance = new Value(42);
1740
+ * const result = valueInstance.isObject();
1741
+ * // Результат: false (число)
1742
+ *
1743
+ * const valueInstance2 = new Value('string');
1744
+ * const result2 = valueInstance2.isObject();
1745
+ * // Результат: false (строка)
1746
+ *
1747
+ * const valueInstance3 = new Value(null);
1748
+ * const result3 = valueInstance3.isObject();
1749
+ * // Результат: false
1750
+ *
1751
+ * const valueInstance4 = new Value(undefined);
1752
+ * const result4 = valueInstance4.isObject();
1753
+ * // Результат: false
1754
+ *
1755
+ * const valueInstance5 = new Value([]);
1756
+ * const result5 = valueInstance5.isObject();
1757
+ * // Результат: false (массив)
1758
+ *
1759
+ * const valueInstance6 = new Value(() => {});
1760
+ * const result6 = valueInstance6.isObject();
1761
+ * // Результат: false (функция)
1762
+ * ```
1763
+ *
1764
+ * @returns {boolean} Возвращает `true`, если значение является объектом, и `false` в противном случае.
1765
+ */
1766
+ isObject() {
1767
+ return this.#getFromStore('isObject', () => is_object(this.#value));
1768
+ }
1769
+
1770
+ /**
1771
+ * Проверяет, является ли значение скалярным.
1772
+ *
1773
+ * ### Описание
1774
+ *
1775
+ * Метод `isScalar` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, скалярным.
1776
+ * Скалярные переменные — это переменные, содержащие `int`, `float`, `string`, `bool` и `symbol`.
1777
+ * Типы `array`, `object`, `null`, `undefined` — не скалярные.
1778
+ *
1779
+ * Метод использует функцию `is_scalar` для выполнения проверки.
1780
+ *
1781
+ * ### Возвращаемое значение
1782
+ *
1783
+ * Возвращает `true`, если значение является скалярным, и `false` в противном случае.
1784
+ *
1785
+ * ### Примеры использования
1786
+ *
1787
+ * 1. Проверка скалярных значений:
1788
+ *
1789
+ * ```js
1790
+ * const valueInstance1 = new Value(true);
1791
+ * const result1 = valueInstance1.isScalar();
1792
+ * // Результат: true
1793
+ *
1794
+ * const valueInstance2 = new Value(42);
1795
+ * const result2 = valueInstance2.isScalar();
1796
+ * // Результат: true
1797
+ *
1798
+ * const valueInstance3 = new Value('hello');
1799
+ * const result3 = valueInstance3.isScalar();
1800
+ * // Результат: true
1801
+ *
1802
+ * const valueInstance4 = new Value(Symbol('symbol'));
1803
+ * const result4 = valueInstance4.isScalar();
1804
+ * // Результат: true
1805
+ * ```
1806
+ *
1807
+ * 2. Проверка не скалярных значений:
1808
+ *
1809
+ * ```js
1810
+ * const valueInstance1 = new Value(null);
1811
+ * const result1 = valueInstance1.isScalar();
1812
+ * // Результат: false
1813
+ *
1814
+ * const valueInstance2 = new Value(undefined);
1815
+ * const result2 = valueInstance2.isScalar();
1816
+ * // Результат: false
1817
+ *
1818
+ * const valueInstance3 = new Value({});
1819
+ * const result3 = valueInstance3.isScalar();
1820
+ * // Результат: false
1821
+ *
1822
+ * const valueInstance4 = new Value([]);
1823
+ * const result4 = valueInstance4.isScalar();
1824
+ * // Результат: false
1825
+ *
1826
+ * const valueInstance5 = new Value(() => {});
1827
+ * const result5 = valueInstance5.isScalar();
1828
+ * // Результат: false
1829
+ * ```
1830
+ *
1831
+ * @returns {boolean} Возвращает `true`, если значение является скалярным, и `false` в противном случае.
1832
+ */
1833
+ isScalar() {
1834
+ return this.#getFromStore('isScalar', () => is_scalar(this.#value));
1835
+ }
1836
+
1837
+ /**
1838
+ * Проверяет, является ли значение строкой.
1839
+ *
1840
+ * ### Описание
1841
+ *
1842
+ * Метод `isString` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, строкой.
1843
+ * Метод использует оператор `typeof` для проверки типа значения.
1844
+ *
1845
+ * Метод использует функцию `is_string` для выполнения проверки.
1846
+ *
1847
+ * ### Возвращаемое значение
1848
+ *
1849
+ * Возвращает `true`, если значение является строкой, и `false` в противном случае.
1850
+ *
1851
+ * ### Примеры использования
1852
+ *
1853
+ * 1. Проверка строковых значений:
1854
+ *
1855
+ * ```js
1856
+ * const valueInstance = new Value('hello');
1857
+ * const result = valueInstance.isString();
1858
+ * // Результат: true
1859
+ *
1860
+ * const valueInstance2 = new Value('');
1861
+ * const result2 = valueInstance2.isString();
1862
+ * // Результат: true
1863
+ * ```
1864
+ *
1865
+ * 2. Проверка значений других типов:
1866
+ *
1867
+ * ```js
1868
+ * const valueInstance = new Value(42);
1869
+ * const result = valueInstance.isString();
1870
+ * // Результат: false (число)
1871
+ *
1872
+ * const valueInstance2 = new Value(true);
1873
+ * const result2 = valueInstance2.isString();
1874
+ * // Результат: false (логическое значение)
1875
+ *
1876
+ * const valueInstance3 = new Value(null);
1877
+ * const result3 = valueInstance3.isString();
1878
+ * // Результат: false
1879
+ *
1880
+ * const valueInstance4 = new Value(undefined);
1881
+ * const result4 = valueInstance4.isString();
1882
+ * // Результат: false
1883
+ *
1884
+ * const valueInstance5 = new Value({});
1885
+ * const result5 = valueInstance5.isString();
1886
+ * // Результат: false (объект)
1887
+ *
1888
+ * const valueInstance6 = new Value([]);
1889
+ * const result6 = valueInstance6.isString();
1890
+ * // Результат: false (массив)
1891
+ * ```
1892
+ *
1893
+ * @returns {boolean} Возвращает `true`, если значение является строкой, и `false` в противном случае.
1894
+ */
1895
+ isString() {
1896
+ return this.#getFromStore('isString', () => is_string(this.#value));
1897
+ }
1898
+
1899
+ /**
1900
+ * Проверяет, является ли значение символом.
1901
+ *
1902
+ * ### Описание
1903
+ *
1904
+ * Метод `isSymbol` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, символом.
1905
+ * Метод использует оператор `typeof` для проверки типа значения.
1906
+ *
1907
+ * Метод использует функцию `is_symbol` для выполнения проверки.
1908
+ *
1909
+ * ### Возвращаемое значение
1910
+ *
1911
+ * Возвращает `true`, если значение является символом, и `false` в противном случае.
1912
+ *
1913
+ * ### Примеры использования
1914
+ *
1915
+ * 1. Проверка символов:
1916
+ *
1917
+ * ```js
1918
+ * const valueInstance = new Value(Symbol('symbol'));
1919
+ * const result = valueInstance.isSymbol();
1920
+ * // Результат: true
1921
+ *
1922
+ * const valueInstance2 = new Value(Symbol.iterator);
1923
+ * const result2 = valueInstance2.isSymbol();
1924
+ * // Результат: true
1925
+ * ```
1926
+ *
1927
+ * 2. Проверка значений других типов:
1928
+ *
1929
+ * ```js
1930
+ * const valueInstance = new Value('hello');
1931
+ * const result = valueInstance.isSymbol();
1932
+ * // Результат: false (строка)
1933
+ *
1934
+ * const valueInstance2 = new Value(42);
1935
+ * const result2 = valueInstance2.isSymbol();
1936
+ * // Результат: false (число)
1937
+ *
1938
+ * const valueInstance3 = new Value(true);
1939
+ * const result3 = valueInstance3.isSymbol();
1940
+ * // Результат: false (логическое значение)
1941
+ *
1942
+ * const valueInstance4 = new Value(null);
1943
+ * const result4 = valueInstance4.isSymbol();
1944
+ * // Результат: false
1945
+ *
1946
+ * const valueInstance5 = new Value(undefined);
1947
+ * const result5 = valueInstance5.isSymbol();
1948
+ * // Результат: false
1949
+ *
1950
+ * const valueInstance6 = new Value({});
1951
+ * const result6 = valueInstance6.isSymbol();
1952
+ * // Результат: false (объект)
1953
+ *
1954
+ * const valueInstance7 = new Value([]);
1955
+ * const result7 = valueInstance7.isSymbol();
1956
+ * // Результат: false (массив)
1957
+ *
1958
+ * const valueInstance8 = new Value(() => {});
1959
+ * const result8 = valueInstance8.isSymbol();
1960
+ * // Результат: false (функция)
1961
+ * ```
1962
+ *
1963
+ * @returns {boolean} Возвращает `true`, если значение является символом, и `false` в противном случае.
1964
+ */
1965
+ isSymbol() {
1966
+ return this.#getFromStore('isSymbol', () => is_symbol(this.#value));
1967
+ }
1968
+
1969
+ /**
1970
+ * Проверяет, является ли значение `undefined`.
1971
+ *
1972
+ * ### Описание
1973
+ *
1974
+ * Метод `isUndefined` используется для проверки, является ли значение, хранящееся в экземпляре класса `Value`, `undefined`.
1975
+ * Метод использует оператор `typeof` для проверки типа значения.
1976
+ *
1977
+ * Метод использует функцию `is_undefined` для выполнения проверки.
1978
+ *
1979
+ * ### Возвращаемое значение
1980
+ *
1981
+ * Возвращает `true`, если значение является `undefined`, и `false` в противном случае.
1982
+ *
1983
+ * ### Примеры использования
1984
+ *
1985
+ * 1. Проверка значения `undefined`:
1986
+ *
1987
+ * ```js
1988
+ * const valueInstance = new Value(undefined);
1989
+ * const result = valueInstance.isUndefined();
1990
+ * // Результат: true
1991
+ * ```
1992
+ *
1993
+ * 2. Проверка значений других типов:
1994
+ *
1995
+ * ```js
1996
+ * const valueInstance = new Value(null);
1997
+ * const result = valueInstance.isUndefined();
1998
+ * // Результат: false
1999
+ *
2000
+ * const valueInstance2 = new Value(42);
2001
+ * const result2 = valueInstance2.isUndefined();
2002
+ * // Результат: false (число)
2003
+ *
2004
+ * const valueInstance3 = new Value('hello');
2005
+ * const result3 = valueInstance3.isUndefined();
2006
+ * // Результат: false (строка)
2007
+ *
2008
+ * const valueInstance4 = new Value(true);
2009
+ * const result4 = valueInstance4.isUndefined();
2010
+ * // Результат: false (логическое значение)
2011
+ *
2012
+ * const valueInstance5 = new Value({});
2013
+ * const result5 = valueInstance5.isUndefined();
2014
+ * // Результат: false (объект)
2015
+ *
2016
+ * const valueInstance6 = new Value([]);
2017
+ * const result6 = valueInstance6.isUndefined();
2018
+ * // Результат: false (массив)
2019
+ *
2020
+ * const valueInstance7 = new Value(() => {});
2021
+ * const result7 = valueInstance7.isUndefined();
2022
+ * // Результат: false (функция)
2023
+ * ```
2024
+ *
2025
+ * @returns {boolean} Возвращает `true`, если значение является `undefined`, и `false` в противном случае.
2026
+ */
2027
+ isUndefined() {
2028
+ return this.#getFromStore('isUndefined', () => is_undefined(this.#value));
2029
+ }
2030
+
2031
+ /**
2032
+ * Преобразует значение в экземпляре класса `Value` к массиву.
2033
+ *
2034
+ * ### Описание
2035
+ *
2036
+ * Метод `toArray` используется для преобразования значения, хранящегося в экземпляре класса `Value`, в массив.
2037
+ * Если значение уже является массивом (тип `Array` или ассоциативный массив), возвращается оно же.
2038
+ * Объекты (экземпляры классов) преобразуются в массив с одним элементом.
2039
+ *
2040
+ * Метод использует функцию `to_array` для выполнения преобразования.
2041
+ *
2042
+ * ### Возвращаемое значение
2043
+ *
2044
+ * Возвращает новый экземпляр класса `Value` с преобразованным значением.
2045
+ *
2046
+ * ### Примеры использования
2047
+ *
2048
+ * 1. Преобразование строки в массив:
2049
+ *
2050
+ * ```js
2051
+ * const valueInstance = new Value('example');
2052
+ * const result = valueInstance.toArray();
2053
+ * // Результат: новый экземпляр класса Value с значением ["example"]
2054
+ * ```
2055
+ *
2056
+ * 2. Преобразование числа в массив:
2057
+ *
2058
+ * ```js
2059
+ * const valueInstance = new Value(123);
2060
+ * const result = valueInstance.toArray();
2061
+ * // Результат: новый экземпляр класса Value с значением [123]
2062
+ * ```
2063
+ *
2064
+ * 3. Преобразование массива (без изменений):
2065
+ *
2066
+ * ```js
2067
+ * const valueInstance = new Value([1, 2, 3]);
2068
+ * const result = valueInstance.toArray();
2069
+ * // Результат: новый экземпляр класса Value с значением [1, 2, 3]
2070
+ * ```
2071
+ *
2072
+ * 4. Преобразование объекта в массив:
2073
+ *
2074
+ * ```js
2075
+ * const valueInstance = new Value({ key: 'value' });
2076
+ * const result = valueInstance.toArray();
2077
+ * // Результат: новый экземпляр класса Value с значением { key: "value" }
2078
+ * ```
2079
+ *
2080
+ * 5. Преобразование экземпляра класса в массив:
2081
+ *
2082
+ * ```js
2083
+ * class MyClass {}
2084
+ * const valueInstance = new Value(new MyClass());
2085
+ * const result = valueInstance.toArray();
2086
+ * // Результат: новый экземпляр класса Value с значением [instance]
2087
+ * ```
2088
+ *
2089
+ * 6. Преобразование null:
2090
+ *
2091
+ * ```js
2092
+ * const valueInstance = new Value(null);
2093
+ * const result = valueInstance.toArray();
2094
+ * // Результат: новый экземпляр класса Value с значением []
2095
+ * ```
2096
+ *
2097
+ * 7. Преобразование undefined:
2098
+ *
2099
+ * ```js
2100
+ * const valueInstance = new Value(undefined);
2101
+ * const result = valueInstance.toArray();
2102
+ * // Результат: новый экземпляр класса Value с значением []
2103
+ * ```
2104
+ *
2105
+ * @returns {Value} Возвращает новый экземпляр класса `Value` с преобразованным значением.
2106
+ */
2107
+ toArray() {
2108
+ return new Value(to_array(this.#value));
2109
+ }
2110
+
2111
+ /**
2112
+ * Преобразует значение в экземпляре класса `Value` к ассоциативному массиву.
2113
+ *
2114
+ * ### Описание
2115
+ *
2116
+ * Метод `toAssoc` используется для преобразования значения, хранящегося в экземпляре класса `Value`, в ассоциативный массив.
2117
+ * Если значение уже является объектом, возвращается оно же. Массивы преобразуются в объекты с индексами в качестве ключей.
2118
+ *
2119
+ * Метод использует функцию `to_assoc` для выполнения преобразования.
2120
+ *
2121
+ * ### Возвращаемое значение
2122
+ *
2123
+ * Возвращает новый экземпляр класса `Value` с преобразованным значением.
2124
+ *
2125
+ * ### Примеры использования
2126
+ *
2127
+ * 1. Преобразование строки в ассоциативный массив:
2128
+ *
2129
+ * ```js
2130
+ * const valueInstance = new Value('example');
2131
+ * const result = valueInstance.toAssoc();
2132
+ * // Результат: новый экземпляр класса Value с значением { 0: 'example' }
2133
+ * ```
2134
+ *
2135
+ * 2. Преобразование числа в ассоциативный массив:
2136
+ *
2137
+ * ```js
2138
+ * const valueInstance = new Value(123);
2139
+ * const result = valueInstance.toAssoc();
2140
+ * // Результат: новый экземпляр класса Value с значением { 0: 123 }
2141
+ * ```
2142
+ *
2143
+ * 3. Преобразование массива в ассоциативный массив:
2144
+ *
2145
+ * ```js
2146
+ * const valueInstance = new Value([1, 2, 3]);
2147
+ * const result = valueInstance.toAssoc();
2148
+ * // Результат: новый экземпляр класса Value с значением { 0: 1, 1: 2, 2: 3 }
2149
+ * ```
2150
+ *
2151
+ * 4. Преобразование ассоциативного массива (без изменений):
2152
+ *
2153
+ * ```js
2154
+ * const valueInstance = new Value({ key: 'value' });
2155
+ * const result = valueInstance.toAssoc();
2156
+ * // Результат: новый экземпляр класса Value с значением { key: 'value' }
2157
+ * ```
2158
+ *
2159
+ * 5. Преобразование экземпляра класса в ассоциативный массив:
2160
+ *
2161
+ * ```js
2162
+ * class MyClass {}
2163
+ * const valueInstance = new Value(new MyClass());
2164
+ * const result = valueInstance.toAssoc();
2165
+ * // Результат: новый экземпляр класса Value с значением { 0: instance }
2166
+ * ```
2167
+ *
2168
+ * 6. Преобразование null:
2169
+ *
2170
+ * ```js
2171
+ * const valueInstance = new Value(null);
2172
+ * const result = valueInstance.toAssoc();
2173
+ * // Результат: новый экземпляр класса Value с значением {}
2174
+ * ```
2175
+ *
2176
+ * 7. Преобразование undefined:
2177
+ *
2178
+ * ```js
2179
+ * const valueInstance = new Value(undefined);
2180
+ * const result = valueInstance.toAssoc();
2181
+ * // Результат: новый экземпляр класса Value с значением {}
2182
+ * ```
2183
+ *
2184
+ * @returns {Value} Возвращает новый экземпляр класса `Value` с преобразованным значением.
2185
+ */
2186
+ toAssoc() {
2187
+ return new Value(to_assoc(this.#value));
2188
+ }
2189
+
2190
+ /**
2191
+ * Преобразует значение в экземпляре класса `Value` к логическому типу.
2192
+ *
2193
+ * ### Описание
2194
+ *
2195
+ * Метод `toBool` используется для преобразования значения, хранящегося в экземпляре класса `Value`, в логическое значение.
2196
+ * Если значение является пустым массивом, метод возвращает `false`.
2197
+ *
2198
+ * Метод использует функцию `to_bool` для выполнения преобразования.
2199
+ *
2200
+ * ### Возвращаемое значение
2201
+ *
2202
+ * Возвращает новый экземпляр класса `Value` с преобразованным значением.
2203
+ *
2204
+ * ### Примеры использования
2205
+ *
2206
+ * 1. Преобразование пустого массива в `false`:
2207
+ *
2208
+ * ```js
2209
+ * const valueInstance = new Value([]);
2210
+ * const result = valueInstance.toBool();
2211
+ * // Результат: новый экземпляр класса Value с значением false
2212
+ * ```
2213
+ *
2214
+ * 2. Преобразование пустого ассоциативного массива в `false`:
2215
+ *
2216
+ * ```js
2217
+ * const valueInstance = new Value({});
2218
+ * const result = valueInstance.toBool();
2219
+ * // Результат: новый экземпляр класса Value с значением false
2220
+ * ```
2221
+ *
2222
+ * 3. Преобразование непустого массива в `true`:
2223
+ *
2224
+ * ```js
2225
+ * const valueInstance = new Value([1, 2, 3]);
2226
+ * const result = valueInstance.toBool();
2227
+ * // Результат: новый экземпляр класса Value с значением true
2228
+ * ```
2229
+ *
2230
+ * 4. Преобразование других значений:
2231
+ *
2232
+ * ```js
2233
+ * const valueInstance1 = new Value('example');
2234
+ * const result1 = valueInstance1.toBool();
2235
+ * // Результат: новый экземпляр класса Value с значением true
2236
+ *
2237
+ * const valueInstance2 = new Value(123);
2238
+ * const result2 = valueInstance2.toBool();
2239
+ * // Результат: новый экземпляр класса Value с значением true
2240
+ *
2241
+ * const valueInstance3 = new Value(null);
2242
+ * const result3 = valueInstance3.toBool();
2243
+ * // Результат: новый экземпляр класса Value с значением false
2244
+ *
2245
+ * const valueInstance4 = new Value(undefined);
2246
+ * const result4 = valueInstance4.toBool();
2247
+ * // Результат: новый экземпляр класса Value с значением false
2248
+ * ```
2249
+ *
2250
+ * @returns {Value} Возвращает новый экземпляр класса `Value` с преобразованным значением.
2251
+ */
2252
+ toBool() {
2253
+ return new Value(to_bool(this.#value));
2254
+ }
2255
+
2256
+ /**
2257
+ * Преобразует значение в экземпляре класса `Value` к логическому типу.
2258
+ *
2259
+ * ### Описание
2260
+ *
2261
+ * Метод `toBoolean` используется для преобразования значения, хранящегося в экземпляре класса `Value`, в логическое значение.
2262
+ * Если значение является пустым массивом, метод возвращает `false`.
2263
+ *
2264
+ * Метод использует функцию `to_bool` для выполнения преобразования.
2265
+ *
2266
+ * ### Возвращаемое значение
2267
+ *
2268
+ * Возвращает новый экземпляр класса `Value` с преобразованным значением.
2269
+ *
2270
+ * ### Примеры использования
2271
+ *
2272
+ * 1. Преобразование пустого массива в `false`:
2273
+ *
2274
+ * ```js
2275
+ * const valueInstance = new Value([]);
2276
+ * const result = valueInstance.toBoolean();
2277
+ * // Результат: новый экземпляр класса Value с значением false
2278
+ * ```
2279
+ *
2280
+ * 2. Преобразование пустого ассоциативного массива в `false`:
2281
+ *
2282
+ * ```js
2283
+ * const valueInstance = new Value({});
2284
+ * const result = valueInstance.toBoolean();
2285
+ * // Результат: новый экземпляр класса Value с значением false
2286
+ * ```
2287
+ *
2288
+ * 3. Преобразование непустого массива в `true`:
2289
+ *
2290
+ * ```js
2291
+ * const valueInstance = new Value([1, 2, 3]);
2292
+ * const result = valueInstance.toBoolean();
2293
+ * // Результат: новый экземпляр класса Value с значением true
2294
+ * ```
2295
+ *
2296
+ * 4. Преобразование других значений:
2297
+ *
2298
+ * ```js
2299
+ * const valueInstance1 = new Value('example');
2300
+ * const result1 = valueInstance1.toBoolean();
2301
+ * // Результат: новый экземпляр класса Value с значением true
2302
+ *
2303
+ * const valueInstance2 = new Value(123);
2304
+ * const result2 = valueInstance2.toBoolean();
2305
+ * // Результат: новый экземпляр класса Value с значением true
2306
+ *
2307
+ * const valueInstance3 = new Value(null);
2308
+ * const result3 = valueInstance3.toBoolean();
2309
+ * // Результат: новый экземпляр класса Value с значением false
2310
+ *
2311
+ * const valueInstance4 = new Value(undefined);
2312
+ * const result4 = valueInstance4.toBoolean();
2313
+ * // Результат: новый экземпляр класса Value с значением false
2314
+ * ```
2315
+ *
2316
+ * @returns {Value} Возвращает новый экземпляр класса `Value` с преобразованным значением.
2317
+ */
2318
+ toBoolean() {
2319
+ return new Value(to_bool(this.#value));
2320
+ }
2321
+
2322
+ /**
2323
+ * Преобразует значение в экземпляре класса `Value` к числу с плавающей точкой.
2324
+ *
2325
+ * ### Описание
2326
+ *
2327
+ * Метод `toFloat` используется для преобразования значения, хранящегося в экземпляре класса `Value`, в число с плавающей точкой.
2328
+ * Если значение не является числом или строкой, метод возвращает `1` для истинных значений и `0` для ложных значений.
2329
+ *
2330
+ * Метод использует функцию `to_float` для выполнения преобразования.
2331
+ *
2332
+ * ### Возвращаемое значение
2333
+ *
2334
+ * Возвращает новый экземпляр класса `Value` с преобразованным значением.
2335
+ *
2336
+ * ### Примеры использования
2337
+ *
2338
+ * 1. Преобразование строки в число с плавающей точкой:
2339
+ *
2340
+ * ```js
2341
+ * const valueInstance = new Value('123.45');
2342
+ * const result = valueInstance.toFloat();
2343
+ * // Результат: новый экземпляр класса Value с значением 123.45
2344
+ * ```
2345
+ *
2346
+ * 2. Преобразование целого числа в число с плавающей точкой:
2347
+ *
2348
+ * ```js
2349
+ * const valueInstance = new Value(123);
2350
+ * const result = valueInstance.toFloat();
2351
+ * // Результат: новый экземпляр класса Value с значением 123.0
2352
+ * ```
2353
+ *
2354
+ * 3. Преобразование булевых значений:
2355
+ *
2356
+ * ```js
2357
+ * const valueInstance1 = new Value(true);
2358
+ * const result1 = valueInstance1.toFloat();
2359
+ * // Результат: новый экземпляр класса Value с значением 1.0
2360
+ *
2361
+ * const valueInstance2 = new Value(false);
2362
+ * const result2 = valueInstance2.toFloat();
2363
+ * // Результат: новый экземпляр класса Value с значением 0.0
2364
+ * ```
2365
+ *
2366
+ * 4. Преобразование других значений:
2367
+ *
2368
+ * ```js
2369
+ * const valueInstance1 = new Value(null);
2370
+ * const result1 = valueInstance1.toFloat();
2371
+ * // Результат: новый экземпляр класса Value с значением 0.0
2372
+ *
2373
+ * const valueInstance2 = new Value(undefined);
2374
+ * const result2 = valueInstance2.toFloat();
2375
+ * // Результат: новый экземпляр класса Value с значением 0.0
2376
+ *
2377
+ * const valueInstance3 = new Value('example');
2378
+ * const result3 = valueInstance3.toFloat();
2379
+ * // Результат: новый экземпляр класса Value с значением 0.0
2380
+ * ```
2381
+ *
2382
+ * @returns {Value} Возвращает новый экземпляр класса `Value` с преобразованным значением.
2383
+ */
2384
+ toFloat() {
2385
+ return new Value(to_float(this.#value));
2386
+ }
2387
+
2388
+ /**
2389
+ * Преобразует значение в экземпляре класса `Value` к целому числу.
2390
+ *
2391
+ * ### Описание
2392
+ *
2393
+ * Метод `toInt` используется для преобразования значения, хранящегося в экземпляре класса `Value`, в целое число.
2394
+ * Если значение не является числом или строкой, метод возвращает `1` для истинных значений и `0` для ложных значений.
2395
+ *
2396
+ * Метод использует функцию `to_int` для выполнения преобразования.
2397
+ *
2398
+ * ### Возвращаемое значение
2399
+ *
2400
+ * Возвращает новый экземпляр класса `Value` с преобразованным значением.
2401
+ *
2402
+ * ### Примеры использования
2403
+ *
2404
+ * 1. Преобразование строки в целое число:
2405
+ *
2406
+ * ```js
2407
+ * const valueInstance = new Value('123');
2408
+ * const result = valueInstance.toInt();
2409
+ * // Результат: новый экземпляр класса Value с значением 123
2410
+ * ```
2411
+ *
2412
+ * 2. Преобразование числа с плавающей точкой в целое число:
2413
+ *
2414
+ * ```js
2415
+ * const valueInstance = new Value(123.45);
2416
+ * const result = valueInstance.toInt();
2417
+ * // Результат: новый экземпляр класса Value с значением 123
2418
+ * ```
2419
+ *
2420
+ * 3. Преобразование булевых значений:
2421
+ *
2422
+ * ```js
2423
+ * const valueInstance1 = new Value(true);
2424
+ * const result1 = valueInstance1.toInt();
2425
+ * // Результат: новый экземпляр класса Value с значением 1
2426
+ *
2427
+ * const valueInstance2 = new Value(false);
2428
+ * const result2 = valueInstance2.toInt();
2429
+ * // Результат: новый экземпляр класса Value с значением 0
2430
+ * ```
2431
+ *
2432
+ * 4. Преобразование других значений:
2433
+ *
2434
+ * ```js
2435
+ * const valueInstance1 = new Value(null);
2436
+ * const result1 = valueInstance1.toInt();
2437
+ * // Результат: новый экземпляр класса Value с значением 0
2438
+ *
2439
+ * const valueInstance2 = new Value(undefined);
2440
+ * const result2 = valueInstance2.toInt();
2441
+ * // Результат: новый экземпляр класса Value с значением 0
2442
+ *
2443
+ * const valueInstance3 = new Value('example');
2444
+ * const result3 = valueInstance3.toInt();
2445
+ * // Результат: новый экземпляр класса Value с значением 0
2446
+ * ```
2447
+ *
2448
+ * @returns {Value} Возвращает новый экземпляр класса `Value` с преобразованным значением.
2449
+ */
2450
+ toInt() {
2451
+ return new Value(to_int(this.#value));
2452
+ }
2453
+
2454
+ /**
2455
+ * Преобразует значение в экземпляре класса `Value` к целому числу.
2456
+ *
2457
+ * ### Описание
2458
+ *
2459
+ * Метод `toInteger` используется для преобразования значения, хранящегося в экземпляре класса `Value`, в целое число.
2460
+ * Если значение не является числом или строкой, метод возвращает `1` для истинных значений и `0` для ложных значений.
2461
+ *
2462
+ * Метод использует функцию `to_int` для выполнения преобразования.
2463
+ *
2464
+ * ### Возвращаемое значение
2465
+ *
2466
+ * Возвращает новый экземпляр класса `Value` с преобразованным значением.
2467
+ *
2468
+ * ### Примеры использования
2469
+ *
2470
+ * 1. Преобразование строки в целое число:
2471
+ *
2472
+ * ```js
2473
+ * const valueInstance = new Value('123');
2474
+ * const result = valueInstance.toInteger();
2475
+ * // Результат: новый экземпляр класса Value с значением 123
2476
+ * ```
2477
+ *
2478
+ * 2. Преобразование числа с плавающей точкой в целое число:
2479
+ *
2480
+ * ```js
2481
+ * const valueInstance = new Value(123.45);
2482
+ * const result = valueInstance.toInteger();
2483
+ * // Результат: новый экземпляр класса Value с значением 123
2484
+ * ```
2485
+ *
2486
+ * 3. Преобразование булевых значений:
2487
+ *
2488
+ * ```js
2489
+ * const valueInstance1 = new Value(true);
2490
+ * const result1 = valueInstance1.toInteger();
2491
+ * // Результат: новый экземпляр класса Value с значением 1
2492
+ *
2493
+ * const valueInstance2 = new Value(false);
2494
+ * const result2 = valueInstance2.toInteger();
2495
+ * // Результат: новый экземпляр класса Value с значением 0
2496
+ * ```
2497
+ *
2498
+ * 4. Преобразование других значений:
2499
+ *
2500
+ * ```js
2501
+ * const valueInstance1 = new Value(null);
2502
+ * const result1 = valueInstance1.toInteger();
2503
+ * // Результат: новый экземпляр класса Value с значением 0
2504
+ *
2505
+ * const valueInstance2 = new Value(undefined);
2506
+ * const result2 = valueInstance2.toInteger();
2507
+ * // Результат: новый экземпляр класса Value с значением 0
2508
+ *
2509
+ * const valueInstance3 = new Value('example');
2510
+ * const result3 = valueInstance3.toInteger();
2511
+ * // Результат: новый экземпляр класса Value с значением 0
2512
+ * ```
2513
+ *
2514
+ * @returns {Value} Возвращает новый экземпляр класса `Value` с преобразованным значением.
2515
+ */
2516
+ toInteger() {
2517
+ return new Value(to_int(this.#value));
2518
+ }
2519
+
2520
+ /**
2521
+ * Преобразует значение в экземпляре класса `Value` к списку.
2522
+ *
2523
+ * ### Описание
2524
+ *
2525
+ * Метод `toList` используется для преобразования значения, хранящегося в экземпляре класса `Value`, в список.
2526
+ * Если значение является `null` или `undefined`, возвращается пустой массив.
2527
+ * Если значение уже является массивом, возвращается оно же.
2528
+ * Если значение является ассоциативным массивом, возвращается массив значений объекта.
2529
+ * Для других значений создается массив, содержащий это значение.
2530
+ *
2531
+ * Метод использует функцию `to_list` для выполнения преобразования.
2532
+ *
2533
+ * ### Возвращаемое значение
2534
+ *
2535
+ * Возвращает новый экземпляр класса `Value` с преобразованным значением.
2536
+ *
2537
+ * ### Примеры использования
2538
+ *
2539
+ * 1. Преобразование `null` в пустой массив:
2540
+ *
2541
+ * ```js
2542
+ * const valueInstance = new Value(null);
2543
+ * const result = valueInstance.toList();
2544
+ * // Результат: новый экземпляр класса Value с значением []
2545
+ * ```
2546
+ *
2547
+ * 2. Преобразование `undefined` в пустой массив:
2548
+ *
2549
+ * ```js
2550
+ * const valueInstance = new Value(undefined);
2551
+ * const result = valueInstance.toList();
2552
+ * // Результат: новый экземпляр класса Value с значением []
2553
+ * ```
2554
+ *
2555
+ * 3. Преобразование массива (без изменений):
2556
+ *
2557
+ * ```js
2558
+ * const valueInstance = new Value([1, 2, 3]);
2559
+ * const result = valueInstance.toList();
2560
+ * // Результат: новый экземпляр класса Value с значением [1, 2, 3]
2561
+ * ```
2562
+ *
2563
+ * 4. Преобразование ассоциативного массива в массив значений:
2564
+ *
2565
+ * ```js
2566
+ * const valueInstance = new Value({ key: 'value' });
2567
+ * const result = valueInstance.toList();
2568
+ * // Результат: новый экземпляр класса Value с значением ['value']
2569
+ * ```
2570
+ *
2571
+ * 5. Преобразование строки в массив:
2572
+ *
2573
+ * ```js
2574
+ * const valueInstance = new Value('example');
2575
+ * const result = valueInstance.toList();
2576
+ * // Результат: новый экземпляр класса Value с значением ['example']
2577
+ * ```
2578
+ *
2579
+ * 6. Преобразование числа в массив:
2580
+ *
2581
+ * ```js
2582
+ * const valueInstance = new Value(123);
2583
+ * const result = valueInstance.toList();
2584
+ * // Результат: новый экземпляр класса Value с значением [123]
2585
+ * ```
2586
+ *
2587
+ * @returns {Value} Возвращает новый экземпляр класса `Value` с преобразованным значением.
2588
+ */
2589
+ toList() {
2590
+ return new Value(to_list(this.#value));
2591
+ }
2592
+
2593
+ /**
2594
+ * Преобразует значение в экземпляре класса `Value` к объекту.
2595
+ *
2596
+ * ### Описание
2597
+ *
2598
+ * Метод `toObject` используется для преобразования значения, хранящегося в экземпляре класса `Value`, в объект.
2599
+ * Если значение уже является объектом, оно возвращается без изменений.
2600
+ * Если значение является классом, возвращается новый экземпляр этого класса.
2601
+ * Если значение является массивом, элементы массива копируются в новый объект.
2602
+ * Для других значений создается объект с полем `value`, содержащим это значение.
2603
+ *
2604
+ * Метод использует функцию `to_object` для выполнения преобразования.
2605
+ *
2606
+ * ### Возвращаемое значение
2607
+ *
2608
+ * Возвращает новый экземпляр класса `Value` с преобразованным значением.
2609
+ *
2610
+ * ### Примеры использования
2611
+ *
2612
+ * 1. Преобразование объекта:
2613
+ *
2614
+ * ```js
2615
+ * class MyClass {}
2616
+ * const obj = new MyClass();
2617
+ * const valueInstance = new Value(obj);
2618
+ * const result = valueInstance.toObject();
2619
+ * // Результат: новый экземпляр класса Value с значением obj
2620
+ * ```
2621
+ *
2622
+ * 2. Преобразование класса:
2623
+ *
2624
+ * ```js
2625
+ * class MyClass {}
2626
+ * const valueInstance = new Value(MyClass);
2627
+ * const result = valueInstance.toObject();
2628
+ * // Результат: новый экземпляр класса Value с значением экземпляра MyClass
2629
+ * ```
2630
+ *
2631
+ * 3. Преобразование null и undefined:
2632
+ *
2633
+ * ```js
2634
+ * const valueInstance1 = new Value(null);
2635
+ * const result1 = valueInstance1.toObject();
2636
+ * // Результат: новый экземпляр класса Value с значением экземпляра анонимного класса
2637
+ *
2638
+ * const valueInstance2 = new Value(undefined);
2639
+ * const result2 = valueInstance2.toObject();
2640
+ * // Результат: новый экземпляр класса Value с значением экземпляра анонимного класса
2641
+ * ```
2642
+ *
2643
+ * 4. Преобразование массива:
2644
+ *
2645
+ * ```js
2646
+ * const arr = [1, 2, 3];
2647
+ * const valueInstance = new Value(arr);
2648
+ * const result = valueInstance.toObject();
2649
+ * // Результат: новый экземпляр класса Value с значением объекта с элементами массива
2650
+ * ```
2651
+ *
2652
+ * 5. Преобразование других значений:
2653
+ *
2654
+ * ```js
2655
+ * const valueInstance = new Value('example');
2656
+ * const result = valueInstance.toObject();
2657
+ * // Результат: новый экземпляр класса Value с значением объекта с полем value, содержащим 'example'
2658
+ * ```
2659
+ *
2660
+ * @returns {Value} Возвращает новый экземпляр класса `Value` с преобразованным значением.
2661
+ */
2662
+ toObject() {
2663
+ return new Value(to_object(this.#value));
2664
+ }
2665
+
2666
+ /**
2667
+ * Преобразует значение в экземпляре класса `Value` к строке.
2668
+ *
2669
+ * ### Описание
2670
+ *
2671
+ * Метод `toString` используется для преобразования значения, хранящегося в экземпляре класса `Value`, в строку.
2672
+ * Он обрабатывает массивы, объекты, классы, функции, символы и другие типы данных, возвращая их строковое представление.
2673
+ *
2674
+ * Метод использует функцию `to_string` для выполнения преобразования.
2675
+ *
2676
+ * ### Возвращаемое значение
2677
+ *
2678
+ * Возвращает новый экземпляр класса `Value` с преобразованным значением.
2679
+ *
2680
+ * ### Примеры использования
2681
+ *
2682
+ * 1. Преобразование строки:
2683
+ *
2684
+ * ```js
2685
+ * const valueInstance = new Value('example');
2686
+ * const result = valueInstance.toString();
2687
+ * // Результат: новый экземпляр класса Value с значением 'example'
2688
+ * ```
2689
+ *
2690
+ * 2. Преобразование числа:
2691
+ *
2692
+ * ```js
2693
+ * const valueInstance = new Value(123);
2694
+ * const result = valueInstance.toString();
2695
+ * // Результат: новый экземпляр класса Value с значением '123'
2696
+ * ```
2697
+ *
2698
+ * 3. Преобразование булевых значений:
2699
+ *
2700
+ * ```js
2701
+ * const valueInstance1 = new Value(true);
2702
+ * const result1 = valueInstance1.toString();
2703
+ * // Результат: новый экземпляр класса Value с значением 'true'
2704
+ *
2705
+ * const valueInstance2 = new Value(false);
2706
+ * const result2 = valueInstance2.toString();
2707
+ * // Результат: новый экземпляр класса Value с значением 'false'
2708
+ * ```
2709
+ *
2710
+ * 4. Преобразование null и undefined:
2711
+ *
2712
+ * ```js
2713
+ * const valueInstance1 = new Value(null);
2714
+ * const result1 = valueInstance1.toString();
2715
+ * // Результат: новый экземпляр класса Value с значением 'null'
2716
+ *
2717
+ * const valueInstance2 = new Value(undefined);
2718
+ * const result2 = valueInstance2.toString();
2719
+ * // Результат: новый экземпляр класса Value с значением 'undefined'
2720
+ * ```
2721
+ *
2722
+ * 5. Преобразование массива:
2723
+ *
2724
+ * ```js
2725
+ * const arr = [1, 2, 3];
2726
+ * const valueInstance = new Value(arr);
2727
+ * const result = valueInstance.toString();
2728
+ * // Результат: новый экземпляр класса Value с значением '[\n 1,\n 2,\n 3,\n]'
2729
+ * ```
2730
+ *
2731
+ * 6. Преобразование объекта:
2732
+ *
2733
+ * ```js
2734
+ * const obj = { key: 'value' };
2735
+ * const valueInstance = new Value(obj);
2736
+ * const result = valueInstance.toString();
2737
+ * // Результат: новый экземпляр класса Value с значением '{\n key: 'value',\n}'
2738
+ * ```
2739
+ *
2740
+ * 7. Преобразование функции:
2741
+ *
2742
+ * ```js
2743
+ * const func = function() {};
2744
+ * const valueInstance = new Value(func);
2745
+ * const result = valueInstance.toString();
2746
+ * // Результат: новый экземпляр класса Value с значением 'function func() {}'
2747
+ * ```
2748
+ *
2749
+ * 8. Преобразование символа:
2750
+ *
2751
+ * ```js
2752
+ * const symbol = Symbol('example');
2753
+ * const valueInstance = new Value(symbol);
2754
+ * const result = valueInstance.toString();
2755
+ * // Результат: новый экземпляр класса Value с значением 'Symbol(example)'
2756
+ * ```
2757
+ *
2758
+ * 9. Преобразование BigInt:
2759
+ *
2760
+ * ```js
2761
+ * const bigInt = BigInt(123);
2762
+ * const valueInstance = new Value(bigInt);
2763
+ * const result = valueInstance.toString();
2764
+ * // Результат: новый экземпляр класса Value с значением '123'
2765
+ * ```
2766
+ *
2767
+ * 10. Преобразование класса:
2768
+ *
2769
+ * ```js
2770
+ * class MyClass {
2771
+ * static test = 'test';
2772
+ * }
2773
+ * const valueInstance = new Value(MyClass);
2774
+ * const result = valueInstance.toString();
2775
+ * // Результат: новый экземпляр класса Value с значением 'class MyClass {}'
2776
+ * ```
2777
+ *
2778
+ * 11. Преобразование экземпляра класса:
2779
+ *
2780
+ * ```js
2781
+ * class MyClass {}
2782
+ * const instance = new MyClass();
2783
+ * const valueInstance = new Value(instance);
2784
+ * const result = valueInstance.toString();
2785
+ * // Результат: новый экземпляр класса Value с значением 'object MyClass'
2786
+ * ```
2787
+ *
2788
+ * @returns {Value} Возвращает новый экземпляр класса `Value` с преобразованным значением.
2789
+ */
2790
+ toString() {
2791
+ return new Value(to_string(this.#value));
2792
+ }
2793
+
2794
+ /**
2795
+ * Получает значение из хранилища или вычисляет его с помощью переданной функции.
2796
+ *
2797
+ * ### Описание
2798
+ *
2799
+ * Приватный метод `#getFromStore` используется для получения значения из внутреннего хранилища `#store`.
2800
+ * Если значение уже существует в хранилище, оно возвращается. В противном случае значение вычисляется с помощью переданной функции `getter`, сохраняется в хранилище и затем возвращается.
2801
+ *
2802
+ * Этот метод позволяет избежать повторных вычислений одного и того же значения, что может быть полезно для оптимизации производительности.
2803
+ *
2804
+ * ### Параметры
2805
+ *
2806
+ * - `name` (string)
2807
+ * Имя ключа, под которым значение хранится в хранилище.
2808
+ * - `getter` (function)
2809
+ * Функция, которая используется для вычисления значения, если оно отсутствует в хранилище.
2810
+ *
2811
+ * ### Возвращаемое значение
2812
+ *
2813
+ * Возвращает значение, хранящееся под указанным ключом в хранилище, или вычисленное значение, если его не было в хранилище.
2814
+ *
2815
+ * ### Примеры использования
2816
+ *
2817
+ * 1. Получение значения из хранилища:
2818
+ *
2819
+ * ```js
2820
+ * const valueInstance = new Value(123);
2821
+ * const result = valueInstance.#getFromStore('type', () => 'integer');
2822
+ * // Результат: 'integer'
2823
+ * ```
2824
+ *
2825
+ * 2. Использование функции для вычисления значения:
2826
+ *
2827
+ * ```js
2828
+ * const valueInstance = new Value(123);
2829
+ * const result = valueInstance.#getFromStore('type', () => gettype(123));
2830
+ * // Результат: 'integer'
2831
+ * ```
2832
+ *
2833
+ * @param {string} name Имя ключа, под которым значение хранится в хранилище.
2834
+ * @param {function} getter Функция, которая используется для вычисления значения, если оно отсутствует в хранилище.
2835
+ * @returns {any} Возвращает значение, хранящееся под указанным ключом в хранилище, или вычисленное значение, если его не было в хранилище.
2836
+ */
2837
+ #getFromStore(name, getter) {
2838
+ if (!(name in this.#store)) {
2839
+ this.#store[name] = getter();
2840
+ }
2841
+
2842
+ return this.#store[name];
2843
+ }
2844
+ }
2845
+
2846
+ export default Value;