Wpis z mikrobloga

@TheNaturator: od 10 lat co chwile ktoś odkrywa takie niezrozumiałe dla niego elementy w js (ale w pełni logiczne biorąc pod uwagę zasady panujące w js, w innych językach masz dokładnie to samo + dodatkowo undefined behaviour)
  • Odpowiedz
@wolodia: [].toString() + [].toString() (plus to tutaj operator konkatenacji stringow, nie ma tego operatora w tablicach wiec najpierw nastapiła konwersja lhs - czyli goscia po lewej a potem rhs czyli po prawej)

Jest to niezmienne działanie js od niepamiętnych czasów, opisywane w prawie każdej dobrej książce do js jako ciekawostka. Po polsku pisał o tym @Marmite tu: http://strims.pl/s/javascript/t/wxqpxo/aha-js-czyli-marmite-wyjasnia-javascriptowe-dziwactwa-cz-1
  • Odpowiedz
@wolodia: jeśli Cię to dziwi to spójrz na pierwszy lepszy przykład z c:

=== to rownowazny zapis.

arr[2] === *(arr + 2) === *(2 + arr) === 2[arr]

Ale c jest p------y c'nie? Tak samo jak każdy inny język oparty na ast.
  • Odpowiedz
@regis3: Dziwi mnie to i nie widzę absolutnie żadnego związku pomiędzy tamtym przykładem i C. Nie wiem ile modnych obecnie języków definiuje dodawanie jako operacja numeryczna *bądź* łączenie stringów, ale jest to dość zaskakujące (przynajmniej dla mnie). A to jak w językach niższego poziomu interpretuje się dostęp do pamięci w tablicy, to dość standardowa wiedza; może po prostu mam skrzywienie wynikające z tego, że jestem programistą C, nie JS.
  • Odpowiedz
@wolodia: jasne, ale konkatenacja czy dodawanie liczb to taki sam przeladowany operator+. Nie bronie js ale w tym konkretnym przypdaku aby zablokować działanie parsera ast należało by dodać wyjątki do niego. Teraz jest to jego naturalne zachowanie. W takim sensie naturalne, że jest wynikiem wszystkich sprecyzowanych wcześniej reguł.
  • Odpowiedz