Access properties of falsy objects

In JavaScript `null` and `undefined` are the only values that cause errors on property access. It is perfectly fine to do `true.toString()` or `0..toFixed()`.

This PR changes the behavior to support falsy primitive values. It uses `== null` check to catch both `null` and `undefined` in one piece.