Có an toàn không khi giả định so sánh chặt chẽ trong một câu lệnh chuyển đổi JavaScript?


105

Tôi có một biến có thể là boolean falsehoặc số nguyên (bao gồm cả 0). Tôi muốn đặt nó trong một câu lệnh chuyển đổi như:

switch(my_var){
    case 0:
         // Do something
         break;
    case 1:
         // Do something else
         break;
    case false:
         // Some other code
}

Trong các thử nghiệm của tôi trong Google Chrome, nó có vẻ hoạt động hoàn hảo, nhưng tôi hơi lo lắng khi sử dụng nó vì tôi sợ rằng trong một số trình duyệt, nếu my_varfalse, nó có thể thực thi trường hợp đầu tiên kể từ đó 0 == false.

Tôi chỉ tự hỏi liệu có điều gì chính thức trong JavaScript nói rằng câu lệnh switch sẽ sử dụng phép so sánh chặt chẽ như vậy không 0 !== false, nhưng tôi không thể tự tìm thấy bất cứ điều gì và tôi không chắc liệu điều này có hoạt động tốt trong các công cụ JavaScript khác nhau hay không. Có ai biết nếu so sánh được thực hiện bởi một tuyên bố chuyển đổi được đảm bảo là nghiêm ngặt?

Câu trả lời:



34

http://qfox.nl/notes/110 trả lời câu hỏi của bạn. (Anh chàng này biết rất nhiều về sự phức tạp của JavaScript)

Công tắc trong Javascript sử dụng kiểm tra kiểu nghiêm ngặt (===). Vì vậy, bạn không bao giờ phải lo lắng về sự ép buộc, điều này ngăn cản một vài wtfjs :). Mặt khác, nếu bạn đang dựa vào sự ép buộc, thì bạn sẽ gặp khó khăn vì bạn không thể ép buộc nó.


jsfiddle.net/to469fLm/4 , bạn có thể tổng quát hóa chức năng cưỡng chế để đạt được nhu cầu của mình
dámthas

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.