2011-09-28 30 views

Trả lời

72
if (typeof variable !== 'undefined') { 
    // .. 
} 
else 
{ 
    // .. 
} 

tìm lời giải thích thêm ở đây:

JavaScript isset() equivalent

+3

Sử dụng! == để so sánh nghiêm ngặt và hiệu suất tốt hơn. –

+1

@ AmericanYak — trong * typeof * kiểm tra thuật toán để giải quyết ['=='] (http://ecma-international.org/ecma-262/5.1/#sec-11.9.3) và ['=== '] (http://ecma-international.org/ecma-262/5.1/#sec-11.9.6) giống hệt nhau vì cả hai giá trị đều có cùng Kiểu (chuỗi), do đó hiệu suất tốt hơn đến từ đâu? – RobG

+0

Điều này không thành công khi vì 'typeof null' là' Object' – nikjohn

0

Bạn có thể sử dụng một cái gì đó như thế này

if (typeof varname != 'undefined') 
    { 
     //do this 
    }  
    else 
    { 
     //do this 

    } 
3

Bạn chỉ cần kiểm tra các loại.

if(typeof yourVar !== "undefined"){ 
    alert("defined"); 
} 
else{ 
    alert("undefined"); 
} 
6

Sử dụng toán tử in.

'myVar' in window; // for global variables only 

typeof kiểm tra sẽ trở lại đúng đối với một biến nếu,

  1. nó chưa được xác định
  2. nó đã được định nghĩa và có giá trị undefined, hoặc
  3. nó đã được xác định nhưng chưa được khởi tạo.

Ví dụ sau sẽ minh họa điểm thứ hai và thứ ba.

// defined, but not initialized 
var myVar; 
typeof myVar; // undefined 

// defined, and initialized to undefined 
var myVar = undefined; 
typeof myVar; // undefined 
+0

Bạn có thể sử dụng * trong cửa sổ * chỉ trong trường hợp đặc biệt của các biến toàn cục vì chúng cũng được tạo thuộc tính của đối tượng chung. Các biến cục bộ không có đối tượng biến có thể thay đổi như vậy. Giả sử rằng có một đối tượng cửa sổ có thể là hợp lý cho các trình duyệt nhưng nói chung không phải là điều cần thiết. – RobG

+1

@RobG - nó không phải là 'cửa sổ' hoặc đối tượng chung. Bất kỳ đối tượng nào cũng có thể được sử dụng ở đây. Bạn đã nêu ra một điểm tốt về các biến được định nghĩa cục bộ không thể truy cập tại đây. Tôi sẽ được quan tâm trong việc tìm ra nếu có một cách để xác định undefinedness cho các biến địa phương chỉ dựa trên các tiêu chí đầu tiên tôi có. – Anurag

+0

Nếu bạn đang nói về các biến và phạm vi, thì bạn chỉ có thể phân biệt giữa các biến toàn cục (vì chúng là các thuộc tính của đối tượng chung) và các biến còn lại. Trong một hàm lồng nhau, không thể biết liệu một định danh là một biến hàm cục bộ hay bên ngoài bởi vì bạn không thể truy cập các đối tượng biến có liên quan. Độ phân giải thuộc tính đối tượng là một điều khác. – RobG

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