Używam następujących elementów, aby zamienić plik console.assert, gdy jest on niedostępny z jakiegokolwiek powodu.
Z pewnością nie jest to norma de facto, i jest dalekie od ideału, ale spełnia twoje wymagania, aby twierdzenie nie było oceniane w trybie produkcji. Pokazuje również wyrażenie, które spowodowało niepowodzenie asercji, co pomaga w debugowaniu.
Skrętna składnia wywołania (z wyrażeniem funkcji) służy do utworzenia zamknięcia, dzięki czemu funkcja assert ma dostęp do tych samych zmiennych, do których dzwoniący miał dostęp.
Podejrzewam, że ma to wysoką wartość czasu kompilacji i czasu pracy, ale nie próbowałem tego sprawdzać.
function assert(func) {
var name;
if (typeof(ENABLE_ASSERTIONS) !== "undefined" && !ENABLE_ASSERTIONS) {
return;
}
name = arguments.callee.caller;
name = name ? name.name : "(toplevel)";
if (!func()) {
throw name + ": assertion failed: " + ('' + func).replace(/function[^(]*\([^)]*\)[^{]*{[^r]*return/, '').replace(/;[ \t\n]*}[ \t\n]*$/, '');
}
}
Korzystanie wygląda tak:
function testAssertSuccess() {
var i = 1;
assert(function() { return i === 1; });
}
function testAssertFailure() {
var j = 1;
assert(function() { return j === 2; });
}
ENABLE_ASSERTIONS = true;
testAssertSuccess();
testAssertFailure();
HTH!
Może tylko fraza glitch - ale zero wydajności to produkcja będzie zła. Być może masz na myśli przybliżenie do zera. –
Asercje? Hm, 'console.assert()'? –
@Marc B: masz rację :) poprawianie. – BreakPhreak