2010-05-18 24 views
6

Có thể kiểm tra cả null và không xác định trong javascript không?Làm thế nào để kiểm tra cả null và không xác định trong js?

if(_var == null || _var == undefined) { 

} 
+1

Tôi sẽ chuyển đổi cả hai biểu thức, nhưng nó sẽ hoạt động. –

+1

Nếu '_var' là' undefined', biểu thức '_var == undefined' sẽ không bao giờ đạt được, bởi vì' _var == null' không gõ ép buộc, [như Pim lưu ý bên dưới] (http://stackoverflow.com/questions/2860058/how-to-check-for-cả-null-và-undefined-in-js/2860063 # 2860063) và 'undefined == null' trả về' true'. '_var == null' cũng sẽ được thử nghiệm cho' undefined', tuy nhiên tôi tin rằng dựa vào cưỡng chế kiểu thường không được khuyến khích. –

Trả lời

4

Tuy nhiên bằng cách sử dụng toán tử == nó không phải là cần thiết. sử dụng foo == null cũng sẽ đúng với foo là không xác định. Tuy nhiên, lưu ý rằng không xác định và null hoặc không (!) Giống nhau. Đó là bởi vì rằng == không loại coersion rằng foo == null cũng đúng cho foo là không xác định.

+0

+1, đây là cách ngắn nhất để đạt được nó, và nó hoàn toàn được mô tả trong spec: [Thuật toán so sánh bình đẳng trừu tượng] (http://bclary.com/2004/11/07/#a-11.9.3) (không phải lo lắng về cưỡng chế kiểu) ... 'if (_var == null) {...}' – CMS

0

bạn cũng có thể sử dụng $defined chức năng trong mootools (và phải có tương đương trong jquery)

7

Trong JavaScript (pre ECMAScript 5), undefined không phải là một hằng số, nhưng một biến toàn cầu, và do đó nó có thể thay đổi giá trị của nó. Do đó nó sẽ là đáng tin cậy hơn để sử dụng các nhà điều hành typeof để kiểm tra undefined:

if (typeof _var === 'undefined') { } 

Ngoài biểu hiện của bạn sẽ trả về một ReferenceError nếu biến _var không được khai báo. Tuy nhiên bạn vẫn có thể kiểm tra nó với toán tử typeof như được hiển thị ở trên.

Vì vậy, bạn có thể thích sử dụng như sau:

if (typeof _var === 'undefined' || _var === null) { } 
+1

Trường hợp đầu tiên của bạn là một chút rủi ro vì _var có thể được đặt thành một số giá trị khác không phải là null. –

+0

@snowlord: Đúng vậy. Tôi đã xóa phần đó. –

+1

may mắn thay bây giờ trên ECMAScript 5, 'undefined' là thuộc tính của đối tượng toàn cầu không thể ghi, không thể định cấu hình (không xóa) và không thể đếm được :) – CMS

1
if (!_var) { 
    // Code here. 
} 

này nên làm việc kể từ khi cả hai undefinednull được loại cưỡng chế false. Tất nhiên có vấn đề nhỏ nếu _var thực sự là false nhưng nó hoạt động vì trong hầu hết các trường hợp, bạn sẽ muốn biết nếu _var không phải là true chứ không phải là một đối tượng.

+4

Lưu ý rằng có ba giá trị khác trong JavaScript ngoài 'false',' null' và 'undefined': Một chuỗi rỗng' "" ',' 0' và 'NaN'. –

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