- Объекты/массивы с одинаковым значением, если они не являются одной переменной, не равны.
Это правда. Вы можете зайти в консоль и проверить прямо сейчас.
[] === [] false [] == [] false
Это происходит потому, что объекты/массивы хранятся в памяти. Символы равенства ===
и ==
проверяют один и тот же экземпляр, за некоторыми исключениями. Исключения не включают объекты/массивы с одинаковым значением, которые не являются точно такой же переменной. Под «точно такой же переменной» я подразумеваю:
const myVariable = []; myVariable === myVariable true myVariable == myVariable true
Обходной путь для этого - использовать JSON.stringify
:
JSON.stringify([]) === JSON.stringify([]) true JSON.stringify([]) == JSON.stringify([]) true
2. NaN не равно NaN.
Да. NaN === NaN
(и даже NaN == NaN
) возвращает false. Вы должны использовать isNaN(NaN)
.
3. Массивы на самом деле являются объектами.
typeof([])
возвращает object
.
4. Деление на ноль дает разные результаты.
0 / 0 NaN 1 / 0 Infinity -1 / 0 -Infinity
5. JavaScript автоматически вставляет точки с запятой.
function a() { return { b: "c" }; } function b() { return { c: "d" }; } a() Object: { b: "c" } b() undefined // Yet these are the same... try { // ... } catch (err) { // ... } // and try { // ... } catch (err) { // ... }