eval does not come without tradeoffs. Code executed with eval is generally slower than code run directly. Having code that runs other code is a level of indirection that comes at a price. Numerous articles and blog posts advocate never using eval at all. Not only is performance a concern, but security comes into play as well. It is very tempting to use eval to operate on user input, but user input cannot be trusted. In the confines of the browser sandbox, much of what a user might try to do wouldn’t reveal anything interesting, but treating user input as trusted code and executing it can open all sorts of unforeseen security concerns. Generally, you should never use eval on user input.
One common use of eval is to access fields of an object. Instead of calling eval("something." + someField), you can usually switch to using something["someField"] instead. This is generally more intuitive for others to read, easier to maintain, and faster in the browser.