2012-02-07 41 views
8

Tôi có một đoạn mã để kiểm tra sự tồn tại của một biến, sử dụng câu lệnh if như ví dụ bên dưới. Tôi cần phải làm một điều nếu var được thiết lập, một điều khác nhau nếu nó không. Trong một trường hợp thử nghiệm nhất định, var cần phải được thiết lập là 0, nhưng điều đó là như nhau là có một var unset trong JS, rõ ràng:JS: kiểm tra sự tồn tại của một var bằng 0

var toMatch; 
toMatch = 0; 
if (!toMatch) { 
    document.write("no"); 
} else { 
    document.write(toMatch); 
} 

// html is "no" 

jsFiddle

Vì vậy, vấn đề của tôi là, làm thế nào tôi kiểm tra cho một var nếu giá trị của nó là hợp pháp bằng không. Tôi nên chỉ ra rằng, trong các chức năng của tôi giá trị có thể được thông qua là 0-40 +.

Trong quá khứ tôi đã sử dụng một công việc xung quanh như thiết lập giá trị ban đầu cho một số đủ cao mà nó không có khả năng được chuyển cho hàm nhưng điều đó dường như là hackey với tôi. Có cách nào tốt hơn để làm điều đó không?

Trả lời

14
var toMatch; 
toMatch = 0; 
if (toMatch === 0) { // or !== if you're checking for not zero 
    document.write("no"); 
} else { 
    document.write(toMatch); 
} 

toMatch === 0 sẽ kiểm tra không.

toMatch === undefined sẽ kiểm tra undefined

equals ba là toán tử so sánh nghiêm ngặt cho các loại kịch bản này. Xem câu hỏi may mắn này: Difference between == and === in JavaScript

+0

Lưu ý rằng 'undefined' không phải là một từ khóa và về mặt lý thuyết có thể ghi đè. Đề xuất sử dụng 'if (typeof (toMatch)! ==" undefined ")' hoặc đóng mã trên một hàm ẩn danh với tham số bổ sung cho 'undefined'. –

+1

Bạn cũng có thể muốn đề cập rằng để kiểm tra sự tồn tại (không nhất thiết là một giá trị cụ thể) bạn có thể làm: 'if (typeof toMatch! == 'undefined') {}; ' –

+0

Bạn cũng có thể sử dụng' (void 0) ' thay vì 'undefined' nếu bạn thực sự hoang tưởng :) –

0

Javascript hơi buồn cười khi nói đến giá trị và kiểm tra boolean. Tôi khuyên bạn nên đọc khoảng Truthy and Falsey bằng Javascript.

Bạn nên sử dụng danh tính bất bình đẳng điều hành !==:

var toMatch; 
toMatch = 0; 
if (toMatch !== 0) { 
    document.write("no"); 
} else { 
    document.write(toMatch); 
} 

Nó cũng đáng hiểu the differences between == and ===.

1

Bạn có thể thấy nếu một tên là undefined với:

if (typeof bad_name === "undefined") { 
+0

loại là toán tử, KHÔNG phải là phương thức. Nên là 'if (typeof bad_name === undefined)' – Relic

+0

OK, đã sửa. Tôi đã học được điều gì đó ngày hôm nay! :) –

+0

Khi tôi lần đầu tiên nhìn thấy ký hiệu đó, tôi cũng là tất cả WTF ... cho bạn biết một chút về việc đúc và nếu bạn lặn sâu hơn, nó cũng sẽ giúp bạn phân tích thuộc tính. – Relic

1

Thay vì

if (toMatch) 

sử dụng

if (toMatch == null) 
+0

-1 vì bạn luôn luôn nên sử dụng hoàn toàn bằng === khi so sánh với null/undefined (từ khóa) – Relic

+1

Không, 'x == null' tương đương với' x === null || x === undefined'. So sánh với 'null' là trường hợp duy nhất bạn nên sử dụng' == '(ví dụ, hướng dẫn kiểu jQuery xác nhận thực hành này). Thực tế là null và undefined là những từ dành riêng là không liên quan. –

+0

Tôi biết điều này, đây chỉ là mặc dù lười biếng ... và bạn đang cho phép ngoại lệ có thể, trừ khi đây là hành vi cụ thể mà bạn đang tìm kiếm. Thực hành JavaScript tốt luôn luôn nói sử dụng hoàn toàn bình đẳng, nhưng tôi đã tìm thấy 1 hoặc 2 vị trí trong tất cả các mã của tôi rằng nó lỗi trong IE vì vậy tôi phải sử dụng tương đối bình đẳng. Và tất nhiên jQuery xác nhận điều này, chúng là thư viện trình duyệt chéo cuối cùng. Đó là lý do tại sao họ có một cổ phần lớn trong thị phần. – Relic

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