2012-03-06 16 views
6

Tôi thực sự thích Coffeescript, nhưng một điều khiến tôi phát điên gần đây là các vấn đề về kiểu với số và chuỗi trong câu lệnh if. Thông thường không phải là vấn đề khi Javascript không quan tâm khi bạn sử dụng ==, nhưng Coffeescript chuyển đổi tất cả so sánh thành ===. Có cách nào để có được so sánh cũ == so sánh không? Tôi ăn ngu ngốc nhưng tôi đã không tìm thấy bất cứ điều gì trên đó.Các vấn đề về đúc sẵn, cách sử dụng tốt == thay vì ===

Lý do là tôi đã chuyển đổi mã người khác bằng cách sử dụng số http://js2coffee.org/ rực rỡ để dễ đọc hơn, nhưng sau đó tôi nhập vấn đề typecasting khi so sánh == được thay thế bằng ===. Không cần phải nói rằng tôi muốn f *** g lười để refactor toàn bộ mã;).

+0

Cảm ơn các liên kết mà trông thật sự hữu ích! – asawyer

+0

Vui lòng thả các thẻ trong tiêu đề, lời chào và chữ ký. –

+2

Thật không may, không có cách nào đáng tin cậy để chuyển đổi mã JavaScript thành CoffeeScript. Nếu bạn sử dụng js2coffee, hãy sử dụng nó làm điểm bắt đầu. Thông thường, khi bạn có 'a == b', điều bạn thực sự muốn là so sánh số như' + a là + b' hoặc so sánh chuỗi như '" # {a} "là" # {b} "'. –

Trả lời

10

Như asawyer nói, điều này là do thiết kế. Nếu bạn thực sựnghĩ rằng bạn cần một sự so sánh == sau đó bạn có thể đặt nó trong backticks:

if `foo == bar` 
    alert 'Sloppy comparison true' 
+0

Phải, luôn có cách viết trực tiếp JS. Tôi không biết rằng nó hoạt động chỉ để so sánh trong các câu lệnh if. Cảm ơn vì điều đó. – thomasf1

+0

Không sao cả. Vui mừng được giúp đỡ. – Jivings

11

Đây là theo thiết kế. Trích dẫn từ sách CoffeeScript: Accelerated JavaScript Development

CoffeeScript’s và == cả hai biên dịch thành JavaScript ===; không có cách nào để có được kiểm tra bình đẳng lỏng lẻo, xuyên suốt của JavaScript ==, được JSLint tán thành và những người khác là nguồn của nhiều khoảnh khắc “WTF?” . Hãy mượn một ví dụ từ http://wtfjs.com/2011/02/11/all-your-commas-are-belong-to-Array:

",,," == new Array(4) // true 
There are also cases where == isn’t transitive: 
'' == '0' // false 
0 == '' // true 
0 == '0' // true 

Để tránh những đầu scratchers, bạn nên thực hiện kiểu chuyển đổi rõ ràng

+0

Cảm ơn báo giá. Tôi biết rằng đó là một quyết định thiết kế và đó là một quyết định tốt về hiệu trưởng. Tôi tự hỏi nếu có một cách xung quanh này mặc dù nếu một cách rõ ràng cần thiết (như nhiều ngôn ngữ lập trình "mặc định" đúng cách, nhưng thường cho phép cách xấu xí là tốt). – thomasf1

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