Tôi nhận thấy điều gì đó hơi lạ với trình biên dịch CoffeeScript và tự hỏi liệu đây có phải là hành vi đúng hay không. Nếu nó là đúng tôi tò mò tại sao có sự khác biệt ..Nhà điều hành tồn tại CoffeeScript và điều này
Với CoffeeScript sau:
if @myVar?
alert myVar
tôi đã mong đợi nó để biên dịch JavaScript như thế này:
if (typeof this.myVar !== "undefined" && this.myVar !== null) {
alert(myVar);
}
Nhưng thay vào đó trình biên dịch của trình biên dịch CoffeeScript là gì:
if (this.myVar != null) {
alert(myVar);
}
Nếu tôi không tham khảo điều này (hoặc bất kỳ đối tượng cha mẹ nào khác), CoffeeScript biên dịch như tôi mong đợi.
Đây có phải là hành vi đúng không? Nếu vậy, tại sao nó hoạt động khác khi sử dụng?
Chỉnh sửa:
Để làm rõ thêm một chút. Điều này không xảy ra chỉ với điều này, nhưng bất kỳ thuộc tính khác của các đối tượng. Ví dụ, nếu tôi là thay thế các CoffeeScript trên với những gì bên dưới nó vẫn sẽ biên dịch với chỉ ...
if myVar.myProp?
alert myVar
thể trùng lặp của [điều hành Hiện sinh và đối tượng tài sản] (http://stackoverflow.com/questions/9990117/existential-operator-and-object-properties) –