2009-12-31 34 views
39

Possible Duplicate:
Detecting an undefined object property in JavaScriptLàm thế nào để xử lý 'undefined' trong javascript

Từ dưới javascript mẫu

try { 
    if(jsVar) { 
    proceed(); 
     } 
}catch(e){ 
     alert(e); 
} 

jsVar này được khai báo và ký tắt trong một js tốt.

Sự cố là mã ném lỗi không xác định khi mã này được thực thi trước khi tệp khác (nơi được khai báo và bắt đầu) được thực hiện. Đó là lý do tại sao nó được bao quanh bởi cố gắng và nắm bắt.

Làm cách nào tốt nhất để xử lý lỗi không xác định này hơn là thử bắt?

Trả lời

64

Bạn có thể kiểm tra thực tế với

if (typeof(jsVar) == 'undefined') { 
    ... 
} 
+0

Điều này có lợi thế nào so với cách "của tôi" không? –

+0

Nó có thể ném một lỗi: jsVar không được xác định. Bạn nên kiểm tra nó theo cách này: if (window.jsVar! == undefined) {}. Có vẻ như typeof() "bắt" lỗi này. –

+0

@Fabien: Hoặc có thể sử dụng nếu ("jsVar" trong cửa sổ) {} ... nhưng tôi sẽ tránh mã yêu cầu mã hóa cho trường hợp lỗi này. –

0

Trong javascript, các giá trị sau sẽ gây ra nếu tình trạng thất bại và không thực hiện tuyên bố của mình: null, không xác định, sai sự thật, NaN, số 0 và sự trống rỗng chuỗi ''.

Giả sử rằng biến jsVar là một boolean và chúng ta muốn gọi phương thức progress() khi jsVar là true, chúng ta có thể thực hiện kiểm tra sau đây.

if (jsVar && jsVar == true) 
    proceed(); 

Đoạn mã trên trước tiên kiểm tra xem jsVar đã được xác định và sau đó kiểm tra xem giá trị của nó có đúng không. Điều kiện if sẽ chỉ được thỏa mãn nếu cả hai điều kiện được đáp ứng.

Nếu jsVar không phải là boolean thì chúng ta có thể thay thế kiểm tra thích hợp thay cho jsVar == true trong mã ở trên.

+0

Hãy nhớ rằng điều này không kiểm tra boolean 'true' khi bạn không sử dụng so sánh nghiêm ngặt (trong JS, ví dụ' '1' == true' là đúng!); điều này sẽ vẫn ném lỗi tham chiếu cũng như nếu biến chưa được xác định, tức là mã của bạn không giải quyết được vấn đề của Madhu – Christoph

+0

@Christoph bạn nói đúng! – Scott

8

Như thường là trường hợp với Javascript, có nhiều cách để làm điều này:

typeof foo !== 'undefined' 
window.foo !== undefined 
'foo' in window 

Hai đầu tiên nên tương đương (miễn là foo không bị che bởi một biến địa phương), trong khi người cuối cùng sẽ trả về true nếu biến thể toàn cục được xác định, nhưng không được khởi tạo (hoặc được đặt rõ ràng là undefined).

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