String.substr is listed in ES3 as optional. String.substring and slice are both defined in ES3 and take a mandatory start and optional end index. If the arguments are out of order, substring swaps them so that a non-empty string is returned in many cases, while slice just returns an empty string. If an argument is negative, slice indexes back from the end of the string, while substring just clamps it to the start of the string. So avoid substr, use substring where the arguments could be negative but the order doesn’t matter (or there is only one argument), and use slice where the order does matter and negative arguments aren’t a problem.
Number does not return a value if there is trailing unparsed text, whereas parseInt stops parsing and returns a value in that case.