2009-02-03 29 views
14

Điều gì sẽ là cách thành ngữ nhất để làm như sau trong javascript:cách Idiomatic để thiết lập giá trị mặc định trong javascript

Nếu myParam không được thông qua vào MyFunc bởi người gọi, sau đó tôi muốn đặt nó vào một giá trị mặc định . Nhưng trước tiên tôi muốn thử và nhận được nó từ một đối tượng, trong đó có thể chưa tồn tại:

function MyFunc(myParam) { 

    if (!myParam) { 
     if (!myObj) { 
      myParam = 10; 
     } 
     else { 
      myParam = myObj.myParam; 
     } 
    } 

    alert(myParam); 
} 

tôi bắt đầu viết:

myParam = myParam || myObj.mParam || 10 

nhưng nhận ra rằng nếu myObj không tồn tại thì đây sẽ thất bại . Tôi có thể đoán như sau:

myParam = myParam || (myObj && myObj.mParam) || 10 

Nó thậm chí có thể hoạt động. Nhưng đó có phải là cách tốt nhất không?

Ví dụ: John Resig làm như thế nào?

+0

myParam = myParam || (myObj || {}). myParam || 10 – Hafthor

Trả lời

17

Nếu myObj là toàn cầu, nó cần tham chiếu đối tượng cửa sổ, nếu không nó sẽ ném một lỗi nếu myObj không xác định.

myParam = myParam || (window.myObj ? window.myObj.mParam : 10); 

hoặc

myParam = myParam || (window.myObj && window.myObj.mParam) || 10; 

này hoạt động cũng như:

myParam = myParam || ((typeof myObj !== "undefined") ? myObj.mParam : 10); 
+0

ném lỗi nếu myObj không tồn tại. – Triptych

+0

Yeah đã bỏ qua điều đó. –

+0

Chỉ cần nhớ rằng 0, rỗng chuỗi, null, false, NaN và undefined tất cả đều sai và sẽ trong hai ví dụ trên cung cấp cho bạn giá trị mặc định. Trong ví dụ thứ ba, bạn chỉ nhận được giá trị mặc định nếu myObj không được xác định, bất kể nếu myObj.mParam được gán hay không. – some

0

Tôi nghĩ rằng câu trả lời khác đã chứng minh rằng có một bó toàn bộ cách một lớp lót có thể thất bại ở đây. Phiên bản của tôi bên dưới có lẽ dễ đọc hơn và không kiểm tra rõ ràng về sự tồn tại của đối tượng/thuộc tính, nhưng không ngắn hơn nhiều:

function MyFunc(myParam){ 
    if (!myParam){ 
     try{ 
      myParam = myObj.myParam; 
     } 
     catch(e){ 
      myParam = 10; 
     } 
    } 
} 
+0

Tôi nghĩ nó dễ đọc hơn –

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