2012-05-05 29 views
12

Sự khác biệt giữa hai điều này là gì? Từ Ruby, tôi đã quen với việc sử dụng apple ||= walrus đặt táo bằng quả óc chó chỉ khi quả táo rỗng. Điều đó có vẻ giống nhau trong JS/CS, mặc dù? = Dường như làm điều tương tự. What confuses tôi là thế này:Toán tử "|| =" khác với "? =" Trong CoffeeScript như thế nào?

apple = 0 
walrus = 9 
apple ?= walrus // outputs 0 
apple ||= walrus // outputs 9 

wat

Trả lời

18

Điều tốt nhất cần làm là xem xét kết quả JS.

Coffeescript:

apple = 0 
walrus = 9 
apple ?= walrus // outputs 0 
apple ||= walrus // outputs 9 

JavaScript:

var apple, walrus; 
apple = 0; 
walrus = 9; 
if (apple == null) apple = walrus; 
apple || (apple = walrus); 

Như bạn có thể thấy, rõ ràng ?= kiểm tra là một cái gì đó là null hoặc undefined trong JS. Điều này rất khác với ||= chỉ dựa trên việc liệu apple có phải là giá trị giả hay không.

Để mở rộng thêm một chút apple ||= walrus tương đương với nghĩa là apple = apple || walrus, do đó, bất kỳ giá trị táo nào là trung thực sẽ làm ngắn mạch logic và không làm thay đổi giá trị của quả táo.

+0

Dòng cuối cùng đã giúp tôi hiểu điều đó. Cảm ơn bạn. – Chris

+0

@Chris Tuyệt vời, rất vui được giúp đỡ. – loganfsmyth

+2

(Đối với trình đọc thông thường: 'undefined == null' là đúng trong JavaScript' undefined' và 'null', hai giá trị false-y, là các giá trị * only * của' x' dẫn đến 'x == null 'là sự thật.) –

3

?= là hiện sinh hành . Nó kiểm tra trên nullundefined.

||= chỉ kiểm tra giá trị của biến là "không sai", nếu tôi nhớ đúng ... nghĩa là 0 là sai.

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