Presumably (it has to be that way as you are showing use a predefined variable so we can't know what is actually in it except by drawing conclusions from the tests you are performing on it) because params is an array and not an object.
Arrays are designed to hold an ordered sequence of values with numeric keys.
Objects have values with (relatively) arbitrary keys.
Stringifying an array only joins the numeric keys. So comparing it to an empty string will only give a false value if there are numeric keys.
$.each is noting that it is iterating over an array and only hits the numeric keys.
df is not a numeric key.
paramsperchance have atoStringmethod that evaluates to""?