2010-02-20 40 views
6

Tôi muốn tìm hiểu xem biến Javascript có tồn tại hay không. Đây là những gì tôi đã cho đến nay đã được gom góp từ các diễn đàn khác nhau:Tìm hiểu xem Biến có tồn tại không

function valueOfVar(foo){ 

    var has_foo = typeof foo != 'undefined'; 

    if(has_foo){ 
     alert('1 = true'); 
     return true; 
    } 
    else { 
     alert('1 = false'); 
     return false; 
    } 

} 

Xin lưu ý, tôi muốn vượt qua trong một chuỗi như foo. Ví dụ: valueOfVar (box_split [0] + '_ 2')

Bây giờ, tôi không nghĩ rằng nó hoạt động vì nó trả về đúng khi các biến nhất định thậm chí không tồn tại. Trong thực tế, nó có vẻ trở lại đúng tất cả các thời gian.

Triển khai JQuery hoạt động cũng sẽ tuyệt vời khi tôi sử dụng tính năng này.

Cảm ơn tất cả sự giúp đỡ nào

Trả lời

6

Bạn có ý nghĩa như thế này?

function variableDefined (name) { 
    return typeof this[name] !== 'undefined'; 
} 

console.log(variableDefined('fred')); 
// Logs "false" 

var fred = 10; 
console.log(variableDefined('fred')); 
// Logs "true" 

Nếu bạn muốn để có thể xử lý các biến địa phương mà bạn sẽ phải làm một cái gì đó khá kỳ lạ như thế này:

function variableDefined2 (value) { 
    return typeof value !== 'undefined'; 
} 

function test() { 
    var name = 'alice' 
    console.log(variableDefined2(eval(name))); 
    var alice = 11; 
    console.log(variableDefined2(eval(name))); 
} 

test(); 
// Logs false, true 
+0

Nó trả về sự thật trên tất cả các trường hợp vẫn còn! – Abs

+0

Không phải khi tôi thử nghiệm trong bảng điều khiển Javascript của Chrome. Bạn thử nghiệm nó như thế nào? – Rich

+0

Có, nó đã hoạt động! Tuyệt diệu! Sai lầm là tôi không đổi tên thành foo ... Biến tôi đang sử dụng. Cảm ơn bạn Rich. :) – Abs

1

Vấn đề với kiểm tra valueOfVar(box_split[0]+'_2') của bạn là bạn đang phụ thêm một chuỗi các thuộc tính không xác định. Bạn sẽ luôn chuyển một chuỗi đến valueOfVar() với giá trị là 'undefined_2'.

Bạn sẽ thấy rằng các nhà điều hành typeof sẽ trở lại 'string' nếu bạn thử như sau:

function valueOfVar(foo){ 
    alert(typeof foo); 
} 

valueOfVar(box_split[0]+'_2'); 

Nhà điều hành typeof sẽ làm việc cho các loại xét nghiệm, nhưng bạn không thể thêm bất cứ điều gì để biến không xác định , nếu không nó sẽ kiểm tra luôn đúng:

if (typeof foo === 'undefined') { 
    // foo does not exist 
} 
else { 
    // it does 
} 
+0

box_split [0] được xác định. Tại sao bạn nghĩ nó không xác định? Nó có giá trị "chk". – Abs

0

Không chắc nếu điều này giải quyết vấn đề của bạn, nhưng trong JavaScript, null là không giống như không xác định. Mã bạn viết là chính xác để kiểm tra nếu một biến không được xác định. IE:

<script> 
window.onload = function() 
{ 
    alert(typeof(abcd) == "undefined"); //true 
    abcd = null; 
    alert(typeof(abcd) == "undefined"); //false 
}; 
</script> 

Bằng cách này, loại null là "đối tượng".

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