null и undefined не имеют метода toString или valueOf. Afaik с помощью String вызывает метод toString своего параметра (например, String({}) = > [object Object]).
Почему работают String(null) или String(undefined? Это не подразумевает Object.prototype.toString.call(null). потому что это оценивается как [object Null].
[edit]: из спецификации ECMA-262/5th edition (стр. 48). Это не добавляет разъяснений, я бы сказал:
/*
Table 13 — ToString Conversions
-------------------------------------------------------------------------
Argument Type | Result
-------------------------------------------------------------------------
Undefined | "undefined"
Null | "null"
Boolean | If the argument is true, then the result is "true".
... | ...
*/