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