Niedawno odkryłem, że 2 == [2]
w JavaScript. Jak się okazuje, to dziwactwo ma kilka ciekawych konsekwencji:Dlaczego 2 == [2] w JavaScript?
var a = [0, 1, 2, 3];
a[[2]] === a[2]; // this is true
Podobnie następujących prac:
var a = { "abc" : 1 };
a[["abc"]] === a["abc"]; // this is also true
Jeszcze dziwniejsze, to działa tak samo:
[[[[[[[2]]]]]]] == 2; // this is true too! WTF?
Te zachowania wydają się być spójne we wszystkich przeglądarkach.
Każdy pomysł, dlaczego jest to funkcja językowa?
Oto bardziej szalone konsekwencje tej „funkcji”:
[0] == false // true
if ([0]) { /* executes */ } // [0] is both true and false!
var a = [0];
a == a // true
a == !a // also true, WTF?
Przykłady te zostały znalezione przez jimbojw http://jimbojw.com sławy, jak walkingeyerobot.
2 === [2] nie działa. –
Hmm wydaje się tak, mój zły. –
, ponieważ nie pasują do typu. w pierwszym przykładzie lewa strona jest oceniana jako pierwsza i kończy się dopasowaniem w typie. – Shawn