Tôi đọc trong 'JavaScript chuyên nghiệp cho nhà phát triển Web' bởi Nicholas Zakas trong p.78 của 3rd edition (người cuối cùng tôi nghĩ):Chuyển tuyên bố và kiểu ép buộc
Lệnh switch so sánh giá trị sử dụng hệt bằng toán tử, do đó không có sự ép buộc kiểu nào xảy ra (ví dụ chuỗi "10" là không bằng số 10).
tôi tạo thành một số câu lệnh switch đơn giản chỉ để xác nhận và kết quả là khác nhau:
var num = "9";
switch (true) {
case num < 0:
alert("less than 0");
break;
case num >= 0 && num <10:
alert("between 0 and 10");
break;
default:
alert("False");
}
https://jsfiddle.net/pbxyvjyf/
Vì vậy, loại ép buộc được thực hiện: các alert("between 0 and 10")
được chọn. Có các quy tắc thay đổi hay tôi đang làm điều gì sai?
Cảm ơn bạn :) Bây giờ tôi hiểu những gì tôi đã làm sai. Trong thực tế, ngay cả trong ví dụ tôi đã cho tác giả là chính xác: \t chữ số "= 0 && num <10: '(ví dụ của tôi) là một chuỗi, vì vậy chuyển thành 0 vì sai và sau đó là' cảnh báo ("từ 0 đến 10"); ' xuất hiện. Cảm ơn bạn! – viery365
Vấn đề là bạn về cơ bản so sánh '" 9 "' với 'true' và' false'. Các biểu thức ('num < 0', 'num > = 0 && num <10') được đánh giá trước khi so sánh trường hợp được thực hiện. –
@MikeC chính xác là cách bạn nói! Bây giờ tôi hiểu rồi. Cảm ơn bạn đã làm cho tôi hiểu những gì tôi đã làm sai. – viery365