Если ([] == false) имеет значение true, почему ([] || true) приводит к []?

Просто проводил некоторые тесты, и я нахожу это странным:

[] == false

Дает истину, это имеет смысл, потому что double equal сравнивает только содержимое, а не тип и пытается выполнить приведение типов. Но если он сравнивает содержимое и возвращает истину, это означает, что [] является ложным (если вы сделали[] == true вы тоже ошибаетесь), что означает:

[] || false

Должен давать ложь, но это дает [], делая это правдивым? Зачем?

Другой пример:

"\n  " == 0

Даёт правда, но"\n " || false дает"\n "? Есть ли объяснение этому или просто странность.

Когда я попробовал это в C, мы получили:

int x = "\n " == 0;
printf("%d\n", x);

int y = "\n " || 0;
printf("%d\n", y);

Выходы:

0
1

Это имеет смысл, но учитывая влияние C на Javascript, поведение отличается.

Ответы на вопрос(3)

Ваш ответ на вопрос