JavaScript Exceptions: What's the deal?

I am having trouble working with Exception Objects in Node.js v.0.10.12.

The code: (test.js)

var _ = require('underscore');

var invalidJson = '{ this is bad }';

try {
    JSON.parse( invalidJson );
}

catch (exc) {
    var keys = Object.keys(exc);
    console.log('Exception keys (' + keys.length + '): ', keys);

    _.each(exc, function (value, key) {
        console.log('exc[' + key + '] = ' + value);
    });

    throw exc;
}

The output:

Exception keys (0):  []

test.js:21
    throw exc;
          ^
SyntaxError: Unexpected token t
    at Object.parse (native)
    at Object.<anonymous> (test.js:10:7)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:901:3

Why is the exception an empty object?

Additionally, the error is reported to come from test.js:21, but in fact is in 'invalidJson':1. Not catching the exception in the first place gets this error message instead:

undefined:1
{ this is bad }
  ^
SyntaxError: Unexpected token t

How can I 'forward' this information when re-throwing the exception?

Object.keys respects unenumerable properties, use

var keys = Object.getOwnPropertyNames(exc);

The properties of the Exception in this case are [ 'stack', 'arguments', 'type', 'message' ].

What's left is the stack trace. 'stack' is a string:

SyntaxError: Unexpected token t
    at Object.parse (native)
    at Object.<anonymous> (test.js:10:7)

.....

This is when the exception is caught using try {} catch {},

however if this try/catch is removed, and left for the system to process, it outputs a much more helpful stack trace:

undefined:1
{ this is bad }

how can I get this stack trace using try {} catch {} ?