Using is.fn to check for functions properly in old IE
undefined can be redefined in older browsers.
Separating assignment from expressions.
IE 8 and below don't allow for..in iteration over strings.