Se ([] == false) for verdadeiro, por que ([] || true) resulta em []?
Estava apenas fazendo alguns testes e acho isso estranho:
[] == false
Verdadeiro, isso faz sentido, porque double igual apenas compara o conteúdo e não o tipo e tenta fazer coerção de tipo. Mas se comparar conteúdo e retornar verdadeiro, isso significa [] é falsey (se você fez[] == true
você também é falso), o que significa:
[] || false
Deve dar falso, mas dá [], tornando-o verdade? Por quê?
Outro exemplo:
"\n " == 0
Dá verdade, mas"\n " || false
dá"\n "
? Existe uma explicação para isso ou é apenas uma estranheza.
Quando tentei isso em C, obtemos:
int x = "\n " == 0;
printf("%d\n", x);
int y = "\n " || 0;
printf("%d\n", y);
Saídas:
0
1
Isso faz sentido, mas, dada a influência de C no Javascript, o comportamento é diferente.