Boolean là một giá trị nguyên thủy đại diện cho đúng hoặc sai. Trong ngữ cảnh Boolean, JavaScript sử dụng kiểu truyền để chuyển đổi giá trị thành true/false. Có các phương thức ẩn và rõ ràng để chuyển đổi các giá trị thành các đối tác boolean của chúng
Bài viết này cung cấp tổng quan về các giá trị trung thực và sai lệch cũng như cách chuyển đổi các giá trị thành boolean trong JavaScript
Bảng giá trị trung thực và sai lệch của JavaScript
Boolean[false]; // false
Boolean[undefined]; // false
Boolean[null]; // false
Boolean['']; // false
Boolean[NaN]; // false
Boolean[0]; // false
Boolean[-0]; // false
Boolean[0n]; // false
Boolean[true]; // true
Boolean['hi']; // true
Boolean[1]; // true
Boolean[[]]; // true
Boolean[[0]]; // true
Boolean[[1]]; // true
Boolean[{}]; // true
Boolean[{ a: 1 }]; // true
Nguồn. Giá trị thật và giả trong JavaScript là gì?Tốt nhất là bắt đầu bằng cách hiểu giá trị nào được JavaScript hiểu là trung thực hoặc sai. Điều quan trọng là phải hiểu sự ép buộc ngầm so với sự ép buộc rõ ràng
Ép buộc ngầm định được bắt đầu bởi công cụ JavaScript và diễn ra tự động. Ép buộc rõ ràng được thực hiện bằng cách chuyển đổi các giá trị theo cách thủ công và JavaScript cung cấp các phương thức tích hợp để xử lý việc này
Toán Tử !!value
0
!!value
!!value
Bạn có thể đã quen thuộc với
!!value
1 là toán tử logic NOT. Khi sử dụng hai liên tiếp [!!value
0], !!value
1 đầu tiên ép buộc giá trị thành boolean và đảo ngược nó. Ví dụ: !!value
4 sẽ dẫn đến sai. !!value
1 thứ hai đảo ngược giá trị đảo ngược trước đó, dẫn đến giá trị boolean thựcĐây thường là một phương pháp ưa thích, vì nó có hiệu suất tốt hơn. Một nhược điểm tiềm ẩn đối với phương pháp này là khả năng đọc bị mất, chủ yếu là nếu các nhà phát triển khác không quen với cách thức hoạt động của toán tử này
________số 8Đây là một ví dụ chia nhỏ điều này thành các bước
const value = "truthy string";
!value; // false
!!value; // true
Dưới đây là danh sách đầu ra ví dụ với toán tử
!!value
0!!value
1Hàm !!value
7
!!value
!!value
3!!value
7 là một hàm toàn cầu chuyển đổi giá trị mà nó được truyền thành một giá trị boolean. Bạn không nên sử dụng từ này với từ khóa mới [
!!value
9] vì từ này tạo ra một thể hiện của Boolean có một loại đối tượng. Dưới đây là một ví dụ về việc sử dụng đúng chức năng này. !!value
6TL;DR
Có hai phương pháp để chuyển một giá trị thành boolean trong JavaScript
1. !!value
0
!!value
!!value
82. !!value
7
!!value
!!value
0!!value
1QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
Kỹ sư UX tại D2iQ. Hứng thú với CSS, React, JavaScript, TypeScript, Design Systems, UX và UI Design
Nếu bạn đọc đến đây, hãy tweet cho tác giả để cho họ thấy bạn quan tâm. Tweet một lời cảm ơn
Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu
!!value
2!!value
3Có bất kỳ ví dụ mã còn lại?
Các ví dụ mã mới trong danh mục Javascript
Tôi muốn triển khai thông báo thông báo trong một trong các dự án của mình, tương tự như những gì bạn thấy trong Google Tài liệu khi đang lưu tài liệu. Nói cách khác, một thông báo xuất hiện cho biết rằng tài liệu đang được lưu mỗi khi có thay đổi. Sau đó, khi các thay đổi được lưu, thông báo sẽ trở thành. "Tất cả sự thay đổi đã được lưu lại trên Drive. ”
Hãy xem cách chúng ta có thể làm điều đó bằng cách sử dụng giá trị boolean, nhưng thực sự bao gồm ba trạng thái có thể. Đây chắc chắn không phải là cách duy nhất để làm điều này, và thẳng thắn mà nói, tôi thậm chí không chắc liệu đó có phải là cách tốt nhất hay không. Dù bằng cách nào, nó đã làm việc cho tôi
Đây là một ví dụ về trạng thái “Đang lưu…” đó
…và trạng thái “Đã lưu”
Sử dụng giá trị
!!value
4 để xác định trạng thái là phản ứng tức thời của tôi. Tôi có thể có một biến tên là !!value
5 và sử dụng nó để hiển thị một chuỗi có điều kiện trong mẫu của mình, như vậy!!value
4…và trong mẫu
!!value
5Bây giờ, bất cứ khi nào chúng tôi bắt đầu lưu, chúng tôi đặt giá trị thành
!!value
6 và sau đó đặt thành !!value
7 bất cứ khi nào không có quá trình lưu nào được tiến hành. Đơn giản, phải không?Tuy nhiên, có một vấn đề ở đây và đó là một chút vấn đề về trải nghiệm người dùng. Thông báo mặc định được hiển thị là “Đã lưu tất cả thay đổi. ” Khi người dùng lần đầu truy cập trang, không có quá trình lưu nào diễn ra và chúng tôi nhận được thông báo “Đã lưu” mặc dù không có lưu nào xảy ra. Tôi không muốn hiển thị gì cho đến khi thay đổi đầu tiên kích hoạt thông báo “Đang lưu” đầu tiên
Điều này yêu cầu một trạng thái thứ ba trong biến của chúng tôi.
!!value
5. Bây giờ câu hỏi trở thành. chúng ta có thay đổi giá trị thành một biến chuỗi là một trong ba trạng thái không? !!value
5 có thể nhận hai giá trị. !!value
6 hoặc !!value
7. Nhưng giá trị trực tiếp sau khi chúng ta đã khai báo nó trong câu lệnh là gì. !!value
52? . Tuyệt quá. Chúng tôi có thể sử dụng giá trị !!value
53 ban đầu đó để tạo lợi thế cho mình… nhưng, điều này sẽ yêu cầu một chút thay đổi trong cách chúng tôi viết điều kiện của mình trong mẫuToán tử bậc ba mà chúng ta đang sử dụng đánh giá biểu thức thứ hai cho bất kỳ thứ gì không thể chuyển đổi thành
!!value
6. Các giá trị !!value
53 và !!value
7 đều không phải là !!value
6 và do đó, giải quyết là !!value
7 cho toán tử bậc ba. Ngay cả câu lệnh if/else cũng hoạt động theo cách tương tự vì !!value
11 được đánh giá cho bất kỳ thứ gì không phải là !!value
6. Nhưng chúng tôi muốn phân biệt giữa !!value
53 và !!value
7. Điều này cũng có thể khắc phục được bằng cách kiểm tra rõ ràng giá trị !!value
7, như vậy!!value
1Chúng tôi hiện đang kiểm tra nghiêm ngặt các giá trị
!!value
6 và !!value
7. Điều này làm cho toán tử bậc ba của chúng ta hơi lồng vào nhau và khó đọc. Nếu mẫu của chúng tôi hỗ trợ câu lệnh if/else, thì chúng tôi có thể cấu trúc lại mẫu như thế này