W komentarzach napisałeś, że wartości sprawdzane w IF są takie same i mają ten sam typ, więc warunek w Twoim kodzie powinien być spełniony - chociaż mogło by być sprawdzenie player.style.left == target.style.right (bo teraz oczekujesz, że jeden obiekt przykryje drugi, a nie że ich przeciwległe krawędzie się zetkną).
Natomiast w podlinkowanym w komentarzu demie warunek jest inny i np. mi po kilku turach gry nie udało się doprowadzić do sytuacji, gdy ten warunek został spełniony z powodu różnic w umiejscowieniu obu kwadratów względem siebie, która nie jest prawidłowo sprawdzana przez warunek. Możliwe, że za którymś razem by się udało, ale logika sprawdzania kolizji powinna działać zawsze, a nie wtedy gdy losowe rozmieszczenie obiektów na to pozwoli - chyba, że taki efekt jest pożądany w grze. :)
Jeśli chodzi o algorytmy do obsługi logiki kolizji, to możesz je znaleźć w internecie, np.: https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection