Joking asde, I define the two as follows.
A fish is someone who will play almost every hand no matter what cards they are holding, and will call in the hope that they hit. This isnt to be confused with draws. A fish will have an Ace and keep calling in the hope an Ace turns up.
A Fish does not understand the concept of laying a good hand down, and will not fold AK even faced with an all in raise on a board of 10, 10, 5. He will make the call in the hope an A or a K turns up.
Fish have no concept of pot odds
, value betting or equity.
If they get a top pair or any pocket cards with an Ace they will raise all in. They likewise will call absolutely any raise if they have an Ace. Regardless of the kicker.
In short a fish plays his cards no matter what the circumstances. They are solely looking at their own two cards and nothing else.
A donkey however is slightly more clued up. He is aware of the hand structure, he will be more inclined to fold his cards, but at the same time he will take risks that really they shouldnt be taking, just for the hope of his hand hitting. A classic example is calling an all in raise with two suited rag cards ie 7 3. He knows about flush draws and he is solely aiming ( despite the long odds of it happening ) to hit the flush.
Its not that he doesnt understand the cards are bad cards to be playing, its that he sees the potential gains to be made as being of greater consequence than the losses he is more than likely going to incur, and the thing about Donks is they will always tell you when they hit, they are the ones laughing and giving it "hehehe" however, if they lose and you ask them why they made the call they always say "well I have to go so I just thought I'd go in with anything"
A fish is just plain naive and to be frank, stupid.
A donkey is a plain and simple idiot who will take risks that no serious poker player ever would take.