Tôi sử dụng thông tin sau để thay thế console.assert khi không khả dụng vì bất kỳ lý do gì.
Nó chắc chắn không phải là một tiêu chuẩn thực tế, và nó là xa lý tưởng, nhưng nó đáp ứng yêu cầu của bạn rằng khẳng định không được đánh giá trong chế độ sản xuất. Ngoài ra, nó cho bạn thấy biểu thức đã kích hoạt xác nhận không thành công, hỗ trợ gỡ lỗi.
Cú pháp gọi điện ngớ ngẩn (có biểu thức hàm) ở đó để tạo một đóng, để hàm xác nhận có quyền truy cập vào cùng các biến mà người gọi của nó có quyền truy cập.
Tôi nghi ngờ rằng tính năng này có thời gian biên dịch và thời gian chạy cao, nhưng tôi chưa thử xác minh điều đó.
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]*$/, '');
}
}
Sử dụng nó trông giống như:
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!
Có thể chỉ là một trục trặc phrasing - nhưng hiệu suất bằng không là sản xuất sẽ là xấu. Có lẽ bạn có nghĩa là chi phí gần bằng không. –
Xác nhận? Hm, 'console.assert()'? –
@Marc B: bạn nói đúng :) sửa nó. – BreakPhreak