Если ([] == 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, поведение отличается.