Chuyển đổi true hoặc falsy thành boolean rõ ràng


97

Tôi có một biến. Hãy gọi nó toto.

Đây totocó thể được thiết lập để undefined, null, một chuỗi, hoặc một đối tượng.

Tôi muốn kiểm tra xem có totođược đặt thành dữ liệu hay không, có nghĩa là đặt thành một chuỗi hoặc một đối tượng, và undefinedcũng không null, và đặt giá trị boolean tương ứng trong một biến khác.

Tôi nghĩ về cú pháp !!, nó sẽ như thế này:

var tata = !!toto; // tata would be set to true or false, whatever toto is.

Đầu tiên !sẽ được đặt thành falsenếu toto là undefinedhoặc nulltruekhác, và thứ hai sẽ đảo ngược nó.

Nhưng nó trông hơi kỳ quặc. Vì vậy, có một cách rõ ràng hơn để làm điều này?

Tôi đã xem câu hỏi này , nhưng tôi muốn đặt một giá trị trong một biến, không chỉ kiểm tra nó trong một ifcâu lệnh.


10
Câu hỏi này được đánh dấu là trùng lặp nhưng nếu bạn nhìn vào câu hỏi khác stackoverflow.com/questions/263965/… thì nó hoàn toàn khác; chúng hoàn toàn không trùng lặp
Sam

@Sam Xin lỗi, nhưng tôi đã tự xác nhận câu hỏi này trùng lặp, tôi không biết về câu hỏi khác này, nhưng nó đã giải quyết được vấn đề của tôi.
Aracthor

11
@Aracthor Nó KHÔNG phải là một bản sao, vì stackoverflow.com/questions/263965/… là về việc chuyển đổi chuỗi chỉ chứa các từ "true" và "false" thành các đối tác Boolean của chúng. Câu hỏi này là về việc chuyển đổi BẤT KỲ biến nào thành Boolean dựa trên việc nó là đúng hay sai.
Alan McBee - MSFT

Câu trả lời:


153

Có, bạn luôn có thể sử dụng cái này:

var tata = Boolean(toto);

Và đây là một số thử nghiệm:

for (var value of [0, 1, -1, "0", "1", "cat", true, false, undefined, null]) {
    console.log(`Boolean(${typeof value} ${value}) is ${Boolean(value)}`);
}

Các kết quả:

Boolean(number 0) is false
Boolean(number 1) is true
Boolean(number -1) is true
Boolean(string 0) is true
Boolean(string 1) is true
Boolean(string cat) is true
Boolean(boolean true) is true
Boolean(boolean false) is false
Boolean(undefined undefined) is false
Boolean(object null) is false

75
Lưu ý, Boolean ("false") là true, khi bạn có thể muốn nó là false.
Sterling Bourne

45
Tại sao bạn lại muốn chuỗi "false" là sai? Thậm chí php không làm điều đó: D
Danon

1
Ý anh ấy Boolean("false").
Robo Robok vào

2
@NoahDavid Nó trả về true. Chuỗi duy nhất được truyền tới falselà một chuỗi rỗng ( "").
Robo Robok 27/09/17

6
Chính xác. Đó là lý do tại sao bạn phải cẩn thận khi sử dụng cụm từ "false" nếu nó nằm trong dấu ngoặc kép và do đó được hiểu là một Chuỗi. Bạn có thể nghĩ rằng bạn đang chuyển nó thành false, nhưng trên thực tế, nó sẽ trả về true - do đó là cảnh báo ban đầu.
Sterling Bourne

0

Bạn có thể sử dụng Boolean(obj)hoặc !!objđể chuyển đổi truthy/falsysang true/false.

var obj = {a: 1}
var to_bool_way1 = Boolean(obj) // true
var to_bool_way2 = !!obj // true
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.