?
và ||
kiểm tra các điều kiện hoàn toàn khác (nhưng chồng chéo).
Nhà điều hành ||
hoạt động chính xác theo cách tương tự như trong JavaScript, vì vậy những thứ như 0
và ''
là falsey theo như ||
là có liên quan; ||
kiểm tra tính trung thực theo nghĩa JavaScript.
Nhà điều hành ?
được chuyển thành == null
trong JavaScript nên a ? b
chỉ b
là khi a
là null
hoặc undefined
; ?
kiểm tra tính xác định theo nghĩa CoffeeScript.
xem xét sau đây:
for v in [false, 0, '', null, undefined, 6]
do (v) ->
a = v
a ||= 'pancakes'
console.log("#{v} ||= 'pancakes':", a)
for v in [false, 0, '', null, undefined, 6]
do (v) ->
a = v
a ?= 'pancakes'
console.log("#{v} ?= 'pancakes':", a)
Vòng lặp đầu tiên sẽ cung cấp cho bạn năm bánh kếp và một 6
, vòng thứ hai sẽ cung cấp cho bạn một false
, 0
, ''
, hai bánh, và một 6
.
Demo: http://jsfiddle.net/ambiguous/PdLDe/1/
Vì vậy, nếu bạn chỉ muốn hành vi JavaScript kiểu (ví dụ: 0
, false
, và ''
đang được bỏ qua) sau đó bạn có thể muốn ||=
. Nếu bạn chỉ muốn bỏ qua null
và undefined
thì bạn muốn ?=
.
Nguồn
2013-03-27 00:33:39
Tôi nghĩ bạn có nghĩa là "# {v} .." không phải "# {a} ..", tại sao in hai lần? –
@NickSotiros: Tôi nghĩ bạn nói đúng, các chuỗi bên trong lệnh 'console.log' nên (và bây giờ làm) sử dụng' # {v} 'trong khi đối số thứ hai phải là' a'. Cảm ơn cho những người đứng đầu lên. –