function decodeValue_(value) {
  if (value && typeof value === 'object') {
    var data;
    if ((data = value['#'])) {
      // Object reference: {'#': 42}
      value = objectList[data];
      if (!value) {
        throw ReferenceError('Object reference not found: ' + data);
      }
      return value;
    }
    if ((data = value['Value'])) {
      if (value['Value'] === 'undefined') {
        // Special value: {'Value': 'undefined'}
        return undefined;
      }
      // Special number: 'Infinity', '-Infinity', 'NaN', '-0'
      return Number(data);
    }
  }
  return value;
}
Given a serialized value, decode it to a real value.
Most values are themselves.  But objects are references, and Infinity, NaN,
-0 and undefined are specially encoded.
@param {*} value Serialized value.
@returns {*} Real value.
@private