Làm thế nào để kiểm tra nếu một biến không null?


285

Tôi biết rằng dưới đây là hai cách trong JavaScript để kiểm tra xem một biến có phải không null, nhưng tôi bối rối đó là cách thực hành tốt nhất để sử dụng.

Tôi có nên làm:

if (myVar) {...}

hoặc là

if (myVar !== null) {...}

Câu trả lời:


399

Chúng không tương đương. Khối thứ nhất sẽ thực thi khối theo sau ifcâu lệnh if myVartrue (nghĩa là đánh giá truetrong một điều kiện), trong khi khối thứ hai sẽ thực thi khối nếu myVarcó bất kỳ giá trị nào khác null.

Các giá trị duy nhất không được truthy trong JavaScript như sau (aka falsy giá trị):

  • null
  • undefined
  • 0
  • "" (chuỗi trống)
  • false
  • NaN

69

Đây là cách bạn có thể kiểm tra nếu một biến không phải là NULL:

if (myVar !== null) {...}

khối sẽ được thực thi nếu myVar không null .. nó sẽ được thực thi nếu myVar không được xác định hoặc sai 0hoặc NaNhoặc bất cứ điều gì khác ..


1
Trong trường hợp cho những người thắc mắc ... Điều này không kiểm tra một chuỗi trống ("")và không xác định. Xem fiddle của tôi làm tài liệu tham khảo: jsfiddle.net/b0tm7yaf
Barrosy

47

Có một bài đọc tại bài viết này: http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-2/

Nó có một số mẹo hay cho JavaScript nói chung nhưng có một điều nó đề cập là bạn nên kiểm tra null như:

if(myvar) { }

Nó cũng đề cập đến những gì được coi là 'chim ưng' mà bạn có thể không nhận ra.


33
Kiểm tra này thực sự không an toàn. Nếu myvar bằng 0, sai hoặc bất kỳ giá trị giả nào khác, kiểm tra sẽ thất bại (nếu bạn chỉ có ý định kiểm tra không null). Vì vậy, chỉ sử dụng điều này để kiểm tra không null nếu biến không bao giờ có thể có giá trị giả khác.
Werzi2001

2
các liên kết không còn hoạt động. Tôi tìm thấy một bản sao của bài đăng ở đây: appendto.com/2010/10/ Dù thật lạ, bởi vì bài đăng của Elijah (và mã mẫu) sẽ gợi ý rằng anh ta là tác giả, nhưng anh ta không được liệt kê là tác giả ở đó ...
thepaulpage

2
Hình như trang web đó không còn tồn tại. Sẽ rất hữu ích nếu bạn có thể bao gồm thông tin trong chính bài đăng, thay vì chỉ là một liên kết bên ngoài.
apraetor

Điều này sẽ không hoạt động nếu giá trị hiện tại nhưng là 0 (không)
zmechanic

15
  • mã bên trong của bạn if(myVar) { code }sẽ KHÔNG được thực thi chỉ khi myVarbằng: false, 0, "", null, undefined, NaNhoặc bạn không bao giờ xác định biến myVar(sau đó thêm mã dừng thực thi và ném ngoại lệ).
  • mã bên trong của bạn if(myVar !== null) {code}sẽ KHÔNG được thực thi chỉ khi myVarbằng nullhoặc bạn không bao giờ xác định nó (ném ngoại lệ).

Ở đây bạn có tất cả ( src )

nếu

nhập mô tả hình ảnh ở đây

== (phủ định của nó ! = )

nhập mô tả hình ảnh ở đây

=== (phủ định của nó ! == )

nhập mô tả hình ảnh ở đây


9

Có một kịch bản có thể khác tôi vừa đi qua.

Tôi đã thực hiện một cuộc gọi ajax và nhận lại dữ liệu dưới dạng null, ở định dạng chuỗi. Tôi đã phải kiểm tra nó như thế này:

if(value != 'null'){}

Vì vậy, null là một chuỗi đọc "null" chứ không thực sự là null.

EDIT: Nên hiểu rằng tôi không bán nó như cách nó nên được thực hiện. Tôi đã có một kịch bản mà đây là cách duy nhất nó có thể được thực hiện. Tôi không chắc tại sao ... có lẽ anh chàng viết back-end đã trình bày dữ liệu không chính xác, nhưng bất kể, đây là cuộc sống thực. Thật là bực bội khi thấy điều này bị bỏ phiếu bởi một người hiểu rằng nó không hoàn toàn đúng, và sau đó được bình chọn bởi một người mà nó thực sự giúp đỡ.


Thay vì phân tích giá trị của bạn hơn so với các nullchuỗi.
Bergi

1
Câu trả lời này là hợp pháp, cho dù bạn có hiểu ứng dụng của nó hay không. Tôi không đánh giá cao việc bị hạ thấp vì đã đăng những thứ thực sự hiệu quả. Bạn có nhận thấy nó có một upvote trước khi bạn chạm vào nó? Đó là bởi vì nó là một kịch bản thực sự.
Mèo phẳng

3
vâng, và tôi đã đánh giá thấp bởi vì tôi nghĩ đó là giải pháp sai. Trong trường hợp có cuộc gọi ajax, tốt hơn bạn nên thực hiện value = JSON.parse(value)và sau đó sử dụng value != nullthử nghiệm đơn giản và phù hợp
Bergi

2
Rõ ràng là bạn không hiểu. Tôi nhận ra bạn nghĩ rằng bạn làm, nhưng bạn không.
Mèo phẳng

4
Tôi hiểu rằng đó là một giải pháp làm việc. Nhưng tôi không nghĩ rằng đó là lời khuyên tốt, vì vậy hãy tôn trọng downvote của tôi.
Bergi

1

if myVarlà null thì nếu block không thực thi khác thì nó sẽ thực thi.

if (myVar != null) {...}


Không phải là chuỗi 'null', nhưng giá trị đặc biệt null.
Micah Walter

1

Đôi khi nếu nó thậm chí không được xác định thì tốt hơn là nên chuẩn bị. Đối với điều này, tôi đã sử dụng typeof

if(typeof(variable) !== "undefined") {
    //it exist
    if(variable !== null) {
        //and is not null
    }
    else {
        //but is null
    }
}
else {
    //it doesn't
}

-4

Hai câu điều kiện bạn liệt kê ở đây không tốt hơn nhau. Việc sử dụng của bạn phụ thuộc vào tình huống. Nhân tiện, bạn có một lỗi đánh máy trong ví dụ thứ 2. Chỉ nên có một dấu bằng sau dấu chấm than.

Ví dụ đầu tiên xác định xem giá trị trong myVar có đúng không và thực thi mã bên trong {...}

Ví dụ thứ 2 đánh giá nếu myVar không bằng null và nếu trường hợp đó là đúng, nó sẽ thực thi mã của bạn bên trong {...}

Tôi đề nghị xem xét các tuyên bố có điều kiện để có thêm kỹ thuật. Một khi bạn đã quen thuộc với họ, bạn có thể quyết định khi nào bạn cần họ.


12
Đó có lẽ không phải là một lỗi đánh máy trong ví dụ thứ hai. Đó là thứ hai =rất quan trọng và tạo ra một sự khác biệt lớn cho câu hỏi. Có lẽ bạn không biết về sự tồn tại của !==và các ===toán tử trong JavaScript?
Tim xuống

1
Cảm ơn đã chỉ ra rằng. Tôi ngay lập tức nghĩ rằng đó là một lỗi đánh máy, nhưng bây giờ nhớ lại rằng tôi đã không thấy trong một thời gian và đã quên mất.
BÁC S
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.