Tôi đã lập trình rất nhiều trong Swift gần đây. Hôm nay tôi đã làm một số công việc trong JavaScipt khi câu hỏi xuất hiện với tôi:Chaining tùy chọn trong JavaScript
Có điều gì đó tương tự như chuỗi tùy chọn trong JavaScript không? Một cách để ngăn chặn undefined is not an object
mà không có bất kỳ biến nào?
Ví dụ:
function test(){
if(new Date() % 2){
return {value: function(){/*code*/}};
}
}
test().value();
sẽ thất bại một nửa thời gian bởi vì đôi khi test
lợi nhuận không xác định.
Giải pháp duy nhất tôi có thể nghĩ đến là một chức năng:
function oc(object, key){
if(object){
return object[key]();
}
}
oc(test(), 'value');
Tôi muốn để có thể làm điều gì đó như:
test()?.value()
Phần sau dấu chấm hỏi chỉ được thực hiện nếu test
trả về một đối tượng.
Nhưng điều này không phải là rất sang trọng. Có cái gì tốt hơn? Một sự kết hợp kỳ diệu của các nhà khai thác?
Chỉnh sửa Tôi biết tôi có thể viết lại test
để trả lại nội dung nào đó. Nhưng tôi tự hỏi nếu có một cái gì đó như chuỗi tùy chọn. Tôi không quan tâm đến một giải pháp cụ thể cho ví dụ trên ở trên. Một cái gì đó mà tôi cũng có thể sử dụng nếu không có quyền kiểm soát các chức năng trở về không xác định.
những gì bạn muốn value() trả lại khi kiểm tra() trả về không xác định? –
@ZaheerAhmed sai hoặc không xác định. Nó không quan trọng thực sự. – idmean
bạn có thể bọc hàm hiện có để trả lại giá trị mặc định trong trường hợp không xác định, không cần viết lại. bạn cũng có thể sử dụng một ternary (x? y: z)() hoặc toán tử mặc định (x || y)() tại thời gian gọi. – dandavis