2011-07-28 42 views

Trả lời

17

Bạn đã (ít nhất là) bốn lựa chọn:

  1. Trong nhiều trường hợp, bạn có thể sử dụng the curiously-powerful || operator:

    x = obj.key || "default"; 
    

    Điều đó có nghĩa: Đặt x để obj.key trừ obj.keyfalsy, trong trường hợp này, hãy sử dụng "default". Giá trị giả là undefined, null, 0, NaN, "" và tất nhiên, false. Vì vậy, bạn sẽ không muốn sử dụng nó nếu obj.key có thể hợp lệ là 0 hoặc bất kỳ giá trị nào khác trong các giá trị đó.

  2. Đối với tình huống mà || không áp dụng, đó là in điều hành:

    x = "key" in obj ? obj.key : "default"; 
    

    in cho chúng ta biết liệu một đối tượng có một tài sản với chìa khóa nhất định. Lưu ý khóa là một chuỗi (tên thuộc tính là chuỗi hoặc Ký hiệu; nếu bạn đang sử dụng Biểu tượng, bạn sẽ biết). Vì vậy, nếu obj.key có thể hợp lệ 0, bạn muốn sử dụng điều này thay vì # 1 ở trên.

  3. in sẽ tìm thấy một chìa khóa nếu nó trong đối tượng hoặc chuỗi nguyên mẫu của đối tượng (ví dụ, tất cả các nơi bạn muốn có được nó từ nếu bạn lấy tài sản). Nếu bạn chỉ muốn kiểm tra các đối tượng chính nó và không chuỗi nguyên mẫu của nó, bạn có thể sử dụng hasOwnProperty:

    x = obj.hasOwnProperty("key") ? obj.key : "default"; 
    
  4. Cụ thể kiểm tra undefined:

    x = typeof obj.key !== "undefined" ? obj.key : "default"; 
    

    Điều đó sẽ sử dụng mặc định nếu không obj có thuộc tính đó hoặc nếu thuộc tính có thuộc tính, nhưng giá trị của thuộc tính là undefined.

+0

Wow, không bao giờ biết điều này. Điều này có làm việc trong các ngôn ngữ khác nữa không (đặc biệt là PHP)? Nó thực sự tuyệt vời. – elslooo

+1

@Tim: Tôi không biết PHP đủ tốt để trả lời câu hỏi đó. Trong hầu hết các ngôn ngữ (C, C++, C#, Java), '||' chỉ trả về 'true' hoặc' false'. Phiên bản của JavaScript thú vị hơn và nhiều hơn nữa trong phong cách lập trình "chức năng". (BTW, '&&' làm một cái gì đó tương tự: Nó cung cấp cho bạn những điều bên phải nếu điều bên trái là "trung thực", hoặc 'sai' nếu nó không phải là.) –

+0

@TJCrowder, tôi chỉ thử nghiệm nó và nó không hoạt động trong PHP :(... Thanks anyway =)! – elslooo

0

gì về:

var d = {'hello':'abc'}; 
var helloVar = d.hello ? d.hello : 'default_val'; 
+0

FWIW, hoạt động chính xác như 'helloVar = d.hello || 'default_val'; ' –

+0

Đúng, mặc dù '... || ... 'ngắn hơn và dễ đọc hơn nhiều. Quá xấu nó không hoạt động trong các ngôn ngữ khác, nó chắc chắn sẽ làm cho ngày của tôi: p! – elslooo

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