2010-05-06 40 views
67

Trong JavaScript, bạn có thể khai báo biến và nếu đó là undefined, bạn có thể kiểm tra variable == undefined; Tôi biết điều đó, nhưng làm thế nào bạn có thể so sánh một giá trị mà bạn chưa biết nếu nó có trong bộ nhớ?Làm thế nào để so sánh các biến không xác định, nếu tôi không biết chúng có tồn tại không?

Ví dụ: tôi có một lớp được tạo khi người dùng nhấp vào nút. Trước đó, lớp học là không xác định - nó không tồn tại ở bất cứ đâu; làm thế nào tôi có thể so sánh nó?

Có cách nào mà không sử dụng try - catch không?

Trả lời

141

Cách tốt nhất là kiểm tra loại, vì undefined/null/false là một điều khó khăn trong JS. Vì vậy:

if(typeof obj !== "undefined") { 
    // obj is a valid variable, do something here. 
} 

Lưu ý rằng typeof luôn trả về một chuỗi, và không tạo ra lỗi nếu biến không tồn tại ở tất cả.

+12

làm cho rằng 'if (typeof obj! ==" undefined ") {}' và nó hoàn hảo (thông báo thứ hai bằng dấu) – raveren

+2

Công cụ lừa là gì? Tại sao không chỉ doring một so sánh trực tiếp như Timmys câu trả lời? – Alex

+5

Bạn chỉ có thể sử dụng 'obj! == undefined' ngay bây giờ. 'undefined' được sử dụng để có thể thay đổi, như' undefined = 1234' điều gì sẽ gây ra kết quả thú vị. Nhưng sau Ecmascript 5, nó không thể ghi được nữa, vì vậy chúng ta có thể sử dụng phiên bản đơn giản hơn. http://www.codereadability.com/how-to-check-for-undefined-in-javascript/ –

2
if (document.getElementById('theElement')) // do whatever after this 

Đối với những thứ không xác định rằng ném lỗi, kiểm tra các tên thuộc tính của đối tượng cha mẹ thay vì chỉ các tên biến - vì vậy thay vì:

if (blah) ... 

làm:

if (window.blah) ... 
-1
if (!obj) { 
    // object (not class!) doesn't exist yet 
} 
else ... 
+0

obj có thể tồn tại nhưng sai hoặc 0. – andig

+0

Đối tượng thông thường không thể chỉ là 'false' hoặc' 0'. Nó phải chứa các cặp 'khóa -> giá trị', hoặc rỗng, hoặc không xác định, hoặc null. – Thevs

+0

Đó không phải là câu hỏi. Chỉ vì bạn gọi một biến obj nó vẫn có thể là bất cứ điều gì imho. – andig

1

!undefined đúng trong javascript, vì vậy nếu bạn muốn biết liệu biến hoặc đối tượng của bạn là undefined và muốn có những hành động, bạn có thể làm một cái gì đó như thế này:

if(<object or variable>) { 
    //take actions if object is not undefined 
} else { 
    //take actions if object is undefined 
} 
+0

cảm ơn bạn thời gian nhưng, tôi trường hợp này nếu bạn cố gắng so sánh biến không khai báo bạn sẽ nhận được một lỗi ném nói rằng bạn đã không khai báo biến ... vì vậy là không thể so sánh nó ... vì vậy là lý do tại sao bạn cần phải chuyển đổi các loại biến trong một định dạng chuỗi trong một cách để so sánh nó thành công ví dụ nếu (loại myundeclaredvarible == "undefined") // làm điều gì đó tốt nhất nahum @Rahul Panday – ncubica

+0

bạn đã chỉnh sửa bài cuối cùng là khá thú vị chưa từng thấy trước đây :) – ncubica

32
if (obj === undefined) 
{ 
    // Create obj 
} 

Nếu bạn đang làm lập trình javascript mở rộng, bạn nên có thói quen sử dụng === và! == khi bạn muốn thực hiện kiểm tra kiểu cụ thể. Ngoài ra, nếu bạn định làm một số lượng javascript hợp lý, tôi khuyên bạn nên chạy mã thông qua JSLint http://www.jslint.com nó có vẻ hơi khó hiểu lúc đầu, nhưng hầu hết mọi thứ JSLint cảnh báo bạn về cuối cùng sẽ quay trở lại để cắn bạn .

+3

+1 cho đi với jslint và so sánh trực tiếp để undefined – Ascherer

+0

Ngoài ra còn có jshint – Martin

+0

một là gì tình huống mà một thứ không phải là 'undefined' sẽ' == undefined'? –

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