Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/01/2014, 07:30
Pantaláimon
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 10 meses
Puntos: 32
Excepción de más. Suceso paranormal hasta que se demuestre lo contrario.

Buenas,

Estoy trabajando en un código Javascript en el cual necesito validar ciertos objetos comprobando que tengan unas propiedades y sólo esas propiedades concretas. Se trata de estos objetos:

{ 'action': ... }, { 'else': ... }, { 'if': ... }, {'if': ... , 'else': ... }, { 'while': ... }

Para ello tengo un método Compiler.prototype.detectOperation() que lanza una excepción si el objeto no cumple esos requisitos. Sin embargo, cuando el objeto no es válido, a parte de la excepción programada por mi, lanza otra más y no logro saber de donde viene. Aquí dejo el código:
http://jsfiddle.net/dWxjA/
Código Javascript:
Ver original
  1. function Compiler(){}
  2.  
  3. Object.defineProperty( Compiler.prototype, 'options', {
  4.     value: { 'action':0, 'else':0, 'if':0, 'while':0 }
  5. });
  6.  
  7. Compiler.prototype.detectOperation = function( operation ){
  8.     var keys = [];
  9.     if       ( typeof operation === 'function' ) {
  10.         return 'calculation';
  11.     } else if( typeof operation ===  'object'  ) {
  12.         keys = Object.keys( operation );
  13.         if       ( keys.length === 1 ) {
  14.             if( keys[0] in this.options )
  15.                 return keys[0];
  16.         } else if( keys.length === 2 ) {
  17.             keys = keys.sort();
  18.             if( keys[0] === 'else' && keys[1] === 'if' )
  19.                 return 'ifelse';
  20.         }
  21.     }
  22.     var error = 'operation{ ' + keys[0];
  23.     for( var i = 1; i < keys.length; ++i )
  24.         error += '-' + keys[i];
  25.     error += ' } is not allowed operation';
  26.     console.log( error );
  27.     throw console.error( error );
  28. }
  29.  
  30. var comp = new Compiler();
  31. var op = comp.detectOperation( { 'if': 0, 'elue': 2  } );
  32. console.log( 'eo' );
  33. console.log( op );

Me lanza la excepción que he programado:
Código BASH:
Ver original
  1. operation{ elue-if } is not allowed operation
pero también ésta:
Código BASH:
Ver original
  1. Uncaught undefined

No es un error que me impida seguir con lo que estoy haciendo pero me tiene mosca no conseguir saber de donde proviene. A ver si alguien sabe explicármelo.

Un saludo y gracias!
__________________
github.com/xgbuils | npm/xgbuils

Última edición por Pantaláimon; 14/01/2014 a las 08:22