2012-01-05 29 views
37

Nếu bạn đi đến một trang kết quả google, và chạy rwt.toString(), bạn sẽ thấy rằng cuộc gọi trở lại cho chức năng này là:Có điểm nào sử dụng "return! 0" trong javascript không?

return !0; 

Tôi không thể nghĩ ra bất cứ lý do tại sao điều này sẽ không phải lúc nào true. Đây có phải là một cách viết tắt cho true hoặc ở đây có nhiều hoạt động hơn không?

Trả lời

44

Điều này luôn đúng, nhưng phải mất 2 byte để tải xuống (!0 là 2 ký tự) thay vì 4 byte để tải xuống giá trị boolean true.

Hầu hết các người khai thác Javascript sẽ chuyển đổi true thành !0 và sai thành !1. Bạn có thể xem ví dụ về điều này bằng cách nhập var y = true; với tối ưu hóa đơn giản trên Trình biên dịch đóng cửa của Google: http://closure-compiler.appspot.com/home

+1

tuy nhiên chỉ mất 1 byte để tải xuống 1. trả về 1; cũng sẽ làm việc đúng không? không khác, và tất cả chúng ta đều biết bạn không thử nghiệm đúng, bạn thử nghiệm không sai. – stu

+0

Điều này thật thú vị. Làm hầu hết các triển khai javascript tối ưu hóa 0 và! 1 thành true và false mà không tính toán? – Kekoa

+5

@stu 'return 1;' trả về một loại 'số'. Nếu ai đó sử dụng giá trị trả về bằng toán tử '===' hoặc '! ==', họ sẽ nhận được kết quả mong đợi từ '! 0', nhưng không nhận được từ' 1'. – Paulpro

Các vấn đề liên quan