2012-05-14 41 views
5

Tôi đang cố gắng xử lý một chức năng hoàn chỉnh trong cuộc gọi ajax. Nếu giá trị là không xác định, tôi muốn cast một var như là một chuỗi rỗng. Nếu không, tôi muốn nắm bắt giá trị vào một mảng chuỗi.Gặp sự cố với undefined! == undefined

Vấn đề là tôi đang nhập câu lệnh if, ngay cả khi ghi lại giá trị của biến được trả về câu hỏi là không xác định. Tôi đang thiếu gì ở đây?

completefunc: function (xData, Status) { 
     $(xData.responseXML).SPFilterNode("z:row").each(function() { 
     if(typeof $(this).attr("ows_Products") !== undefined) { 
      console.log($(this).attr("ows_Products")); 
      arr = $(this).attr("ows_Products").split(','); 
     } 
     else { 
      arr = ""; 
     } 
     }); 
    } 
+1

Hãy nhìn vào câu hỏi trước này: http://stackoverflow.com/questions/776950/javascript -undefined-undefined –

+0

@web_bod trông có vẻ nhiều hơn về so sánh == đến ===, có nghĩa là null == undefined = true, trong khi null === undefined = false – Wesley

Trả lời

16

typeof trả về một giá trị chuỗi, vì vậy bạn sẽ cần phải so sánh với "undefined" như là một chuỗi. Ví dụ:

if(typeof $(this).attr("ows_Products") !== "undefined") { ... } 

Edit - biết thêm:

Nếu bạn kiểm tra MDN page for typeof, bạn sẽ thấy điều này:

Các toán tử typeof trả về một chuỗi chỉ ra các loại toán hạng chưa được đánh giá.

này rất khác so với trả lại Type bản thân (mà trong JavaScript có lẽ sẽ là một cái gì đó giống như trở về một hàm constructor như String, Array, vv). Vì vậy, khi sử dụng typeof, bạn sẽ luôn được so sánh với chuỗi như "object", "string", "undefined" vv

+0

Ahh vâng. Đó là những điều nhỏ nhặt, đôi khi. – Wesley

+5

Sự đơn giản của giải pháp nói chung là tỷ lệ nghịch với thời gian bạn bỏ ra để xem xét vấn đề :) – jmar777

+0

+1, chỉ vì nhận xét đó !!! – gdoron

0
if($(this).attr("own_Products")){ 
     arr = $(this).attr("ows_Products").split(','); 
}else{ 
     arr="" 
}