Cấu hình PREVIEW=false nhưng ứng dụng vẫn bật chế độ xem trước. Một nguyên nhân thường gặp là chuyển chuỗi bằng Boolean(value) hoặc !!value. Hai cách này kiểm tra truthiness, không đọc ý nghĩa từ true hay false trong văn bản.
1. Chuỗi không rỗng vẫn là truthy
console.log(Boolean('false')); // true
console.log(Boolean('0')); // true
console.log(Boolean(' ')); // true
console.log(Boolean('')); // false
console.log(!!'false'); // true
Chuỗi 'false' chứa ký tự nên được chuyển thành true. Thay Boolean bằng hai dấu phủ định không sửa được vấn đề. Khi review cờ cấu hình từ môi trường hoặc biểu mẫu, cần xem kiểu dữ liệu thực tế thay vì tên biến.
Theo tài liệu Node.js, giá trị trong file .env được diễn giải thành chuỗi. Bài dùng dữ liệu giả lập để kiểm thử, không đọc hoặc thay đổi biến môi trường thật.
2. Định nghĩa tập giá trị được phép
Helper minh họa chỉ nhận undefined hoặc chuỗi chính xác 'true' và 'false'. Thiếu cấu hình dùng false; chuỗi rỗng, '0', 'FALSE' và khoảng trắng đều bị từ chối. Đây là chính sách có chủ đích: nếu sản phẩm muốn chấp nhận thêm cách viết, phải mở rộng và kiểm thử tập giá trị đó.
function parsePreviewFlag(value) {
if (value === undefined) return false;
if (value === 'true') return true;
if (value === 'false') return false;
throw new TypeError('Expected true, false, or an absent value');
}
console.log(parsePreviewFlag(undefined)); // false
console.log(parsePreviewFlag('true')); // true
console.log(parsePreviewFlag('false')); // false
try {
parsePreviewFlag('');
} catch (error) {
console.log(error instanceof TypeError); // true
}
So sánh trực tiếp value === 'true' cũng cho boolean, nhưng nếu dùng một mình, mọi lỗi gõ như 'treu' sẽ âm thầm thành false. Helper ném lỗi để nơi khởi tạo cấu hình có thể báo rõ giá trị không hợp lệ. Không mặc định tắt một cấu hình bắt buộc nếu hợp đồng yêu cầu phải cung cấp.
3. JSON có boolean thật và cũng có chuỗi
const typed = JSON.parse('{"preview":false}');
const textual = JSON.parse('{"preview":"false"}');
console.log(typeof typed.preview); // boolean
console.log(typeof textual.preview); // string
console.log(typed.preview); // false
console.log(Boolean(textual.preview)); // true
Ví dụ tự kiểm chứng cho thấy JSON.parse không tự hiểu chuỗi 'false' thành boolean. Với API quy định preview là boolean, kiểm tra typeof preview === 'boolean' và giữ nguyên giá trị đó. Hàm parsePreviewFlag dành cho cờ văn bản; không đưa mọi nguồn dữ liệu qua cùng một bước chuyển kiểu.
4. Tránh tạo object Boolean cho điều kiện
const wrapped = new Boolean(false);
console.log(typeof wrapped); // object
console.log(Boolean(wrapped)); // true
console.log(wrapped.valueOf()); // false
Object bọc giá trị false vẫn là truthy khi dùng trong điều kiện. Nếu ứng dụng cần trạng thái bật/tắt, giữ boolean nguyên thủy. Việc nhìn thấy false khi in object không bảo đảm một câu lệnh if sẽ đi vào nhánh tắt.
5. Kiểm thử tại ranh giới nhận cấu hình
- Thiếu giá trị, 'true' và 'false'.
- Chuỗi rỗng, khoảng trắng và sai chữ hoa/thường.
- '0', '1', null và boolean thật truyền nhầm vào parser văn bản.
- Chuỗi gần đúng như 'treu' phải báo lỗi.
- API trả đúng kiểu boolean theo schema.
Tám khối ví dụ Việt–Anh đã chạy bằng Node.js, kèm kiểm tra giá trị hợp lệ và bị từ chối của helper. Chưa kiểm thử tích hợp file .env hoặc giao diện. Tham khảo MDN Boolean và tài liệu Node.js về giá trị biến môi trường.




Chưa có bình luận. Hãy là người đầu tiên chia sẻ ý kiến.