I was intrigued to read more about the eval() function at MDN , and encountered the following passsage
If the argument of eval() is not a string, eval() returns the argument unchanged.
In the following example, the String constructor is specified and eval() returns a String object rather than evaluating the string.
eval(new String('2 + 2')); // returns a String object containing "2 + 2"
eval('2 + 2'); // returns 4
It didn't make sense to me as "if eval doesn't evaluate its argument if it's not a string, then why did it create a new object instance !?"