2010-03-11 38 views
79

Dưới đây là đoạn mã, trong đó chúng tôi truy lục giá trị biểu mẫu. Trước khi kiểm tra xử lý tiếp theo nếu giá trị không phải là rỗng ..javascript kiểm tra không null

var val = document.FileList.hiddenInfo.value; 
alert("val is " + val); // this prints null which is as expected 
if (val != null) 
{ 
    alert("value is "+val.length); // this returns 4 
} 
else 
{ 
    alert("value* is null"); 
} 

Bất kỳ ý tưởng nào tại sao nó xảy ra như vậy .. ??

+0

không thể hoàn thành CW? – Anurag

+2

CW xảy ra vì có hơn 6 người dùng đã chỉnh sửa câu hỏi. – YOU

Trả lời

51

Đó là vì val không phải là null, nhưng chứa 'null' làm chuỗi.

Cố gắng kiểm tra với 'null'

if ('null' != val) 
+2

nên được nếu (null! = Val) bằng cách nào đó nó đã không làm việc với các dấu ngoặc kép – Ananda

+0

Mr.x trong câu hỏi, null là chuỗi ... trường hợp của bạn có lẽ khác nhau –

7

Bạn nên sử dụng nghiêm ngặt not equals so sánh điều hành !== do đó nếu sử dụng đầu vào "null" sau đó bạn sẽ không nhận được để các else.

+0

Susan Null sẽ không được hạnh phúc nếu tên của cô không được chấp nhận trong biểu mẫu nhập dữ liệu lol – Andez

25

Sử dụng !== làm != sẽ đưa bạn vào thế giới của sự thật kỳ lạ về bảng chân lý JavaScript phi thực tế.

4

Có thể do giá trị val thực sự là chuỗi "null" thay vì giá trị null.

118

này sẽ làm các trick cho bạn

if (!!val) { 
    alert("this is not null") 
} else { 
    alert("this is null") 
} 
+3

cảm ơn perfekt. (!! val): JS == (val): C, C++ –

+17

trong khi kỹ thuật này hoạt động, một đôi không (!!) là một chương trình faux-pas. Nó thực sự là tương đương với 'if (val)', mà là rõ ràng hơn nhiều để đọc. Tôi sẽ dính vào đó (fyi Ujwal, !! val nên kỹ thuật làm việc trong C hoặc C + + cũng) xem ở đây cho javascript 'truthiness' giá trị: https://janosch.woschitz.org/javascript-equality-comparison/ –

+2

làm thế nào về nếu (! Boolean (val)) – thedjaney

1

này sẽ làm việc tốt ..

if(val!= null) 
    { 
     alert("value is "+val.length); //-- this returns 4 
    } 
    else 
    { 
     alert("value* is null"); 
    } 
0

này sẽ làm việc:

if (val) { 
    alert("Not null"); 
} else { 
    alert("Null"); 
} 
2

Nếu bạn muốn để có thể bao gồm 0 làm giá trị hợp lệ:

if (!!val || val === 0) { ... } 
28

Có 3 cách để kiểm tra "không rỗng". Đề xuất của tôi là sử dụng Phiên bản không nghiêm ngặt.

1. Strict Không Version

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

Các Strict Không Version sử dụng "Strict Bình đẳng So sánh Algorithm" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6. !== có hiệu suất nhanh hơn so với toán tử != vì Thuật toán so sánh chính xác nghiêm ngặt không có giá trị được nhập.

2. Non-nghiêm ngặt Không Version

if (val != 'null') { ... } 

Phiên bản Non-nghiêm ngặt sử dụng "Tóm tắt bình đẳng So sánh Algorithm" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3. != có hiệu suất chậm hơn so với toán tử !== vì Thuật toán so sánh trừu tượng đánh giá các giá trị.

3. Double Không Version

if (!!val) { ... } 

The Double Không Version !! có hiệu suất nhanh hơn, hơn cả Strict Không Version !== và Non-Strict Không Version != (https://jsperf.com/tfm-not-null/6).Tuy nhiên, nó sẽ định nghĩa các giá trị "Falsey" như undefinedNaN thành False (http://www.ecma-international.org/ecma-262/5.1/#sec-9.2) có thể dẫn đến kết quả không mong muốn và có khả năng đọc kém hơn vì null không được nêu rõ.

+0

Nó rất kỳ quặc. '!! val' làm việc cho tôi nhưng' val! == null' thì không. Tại sao lại như vậy? – TheLogicGuy

+0

@TheLogicGuy - datatype của 'val' là gì? 'console.log (typeof val)'. – tfmontague

+0

số. mã loại bỏ các giá trị "xấu" khỏi mảng (null, 0 vv). Đây là mã: http: //pastebin.com/L7Z1BtuL – TheLogicGuy

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