Attualmente sto implementando alcuni spessori per la bozza ES6. Mi chiedo se qualcuno possa dirmi cosa significa ReturnIfAbrupt
. Per esempio, la mia implementazione per Number.toInt
(che chiamate interne [[ToInteger]]
è la seguente:.Che cosa significa ReturnIfAbrupt nella bozza ES6?
if (!('toInt' in Number))
Object.defineProperty(Number, 'toInt', {
value: function toInt(value) {
// ECMA-262 Ed. 6, 9-27-12. 9.1.4
// 1. Let number be the result of calling ToNumber on the input argument.
var number = Number(value);
// 2. ReturnIfAbrupt(number).
// ?
// 3. If number is NaN, return +0.
if (number != number) return 0;
// 4. If number is +0, -0, +Infinity, or -Infinity, return number.
if (number == 0 || 1/number == 0) return number;
// 5. Return the result of computing sign(number) * floor(abs(number)).
return (n < 0 ? -1 : 1) * Math.floor(Math.abs(number));
},
writable: true,
configurable: true
});
Fase 2 è ReturnIfAbrupt(number)
Noterete ho attualmente // ?
per questo passo, perché io non sono sicuro di cosa fare cosa. significa quando si dice ReturnIfAbrupt(...)
?
ho letto la sezione sulla ReturnIfAbrupt
nel progetto, ma non riesco a capire cosa fare per la fase 2, cosa mettere al posto del // ?
nel codice di cui sopra.
Dalla mia lettura, potrebbe essere che nulla dovrebbe essere fatto, e il passo ReturnIfAbrupt
significa semplicemente lasciare che qualsiasi errore che si è verificato in ToNumber si propaghi, uscendo dalla funzione. Tuttavia, ciò sembra eccessivamente prolisso, come direi che potrebbe non dirlo. Inoltre, non mi sembra che lo ToNumber
possa persino generare un errore. Qualcuno potrebbe confermare o aiutarmi a capire il vero significato?
Ecco un punto di partenza: http: //people.mozilla .org/~ jorendorff/es6-draft.html # sec-8.8.4 –
Sì, l'ho letto. Non ha senso per me, ma da quello che posso ricavarne, sembra che non ci sia davvero niente da fare su quel passo, e che se un errore è stato generato da 'ToNumber' nel passaggio 1 dovrebbe essere propagato e la funzione dovrebbe uscire. Tuttavia, non capisco davvero perché questo avrebbe bisogno del suo stesso passo, come dovrebbe essere capito. Se è così, vorrei una conferma. Se non è il caso, ho bisogno di aiuto per capire. –
La tua interpretazione sembra giusta. Potrebbero esserci alcuni dettagli che mi mancano, ma la parte importante sarebbe restituire un'eccezione in caso di errore nel tipo di cover che immagino. –