2011-12-15 46 views
9

Tôi muốn mã của mình để nếu một var cụ thể tồn tại, nó sẽ thực hiện một hành động, nếu không thì nó sẽ bị bỏ qua và di chuyển. Vấn đề với mã của tôi là, nếu var cụ thể không tồn tại nó gây ra lỗi, có lẽ bỏ qua phần còn lại của mã JavaScript.JavaScript nếu var tồn tại

Ví dụ

var YouTube=EpicKris; 

if ((typeof YouTube) != 'undefined' && YouTube != null) { 
    document.write('YouTube:' + YouTube); 
}; 
+0

có thể trùng lặp của [Phát hiện thuộc tính đối tượng không xác định trong JavaScript] (http://stackoverflow.com/questions/27509/detecting-an-undefined-object-property-in-java script) –

Trả lời

3

Code:

var YouTube=EpicKris; 

if (typeof YouTube!='undefined') { 
    document.write('YouTube:' + YouTube); 
}; 

Làm việc ra phương pháp tốt nhất cho điều này, sử dụng typeof để kiểm tra nếu var tồn tại. Điều này làm việc hoàn hảo cho tôi.

7
try { 
    if(YouTube) { 
    console.log("exist!"); 
    } 
} catch(e) {} 
console.log("move one"); 

sẽ làm việc khi YouTube không phải là null, undefined, 0 hoặc "".

Điều đó có phù hợp với bạn không?

+0

Vì vậy, nếu var YouTube = EpicKris; không tồn tại hoặc nếu var YouTube = null; hoặc YouTube = 0; thì không có lỗi nào xảy ra và phần còn lại của mã JavaScript sẽ chạy? –

+0

Ups, bỏ qua câu trả lời của tôi, là lỗi, gurung's là tốt hơn! – Chango

+0

Vâng, tôi đã sửa nó bằng câu trả lời của gurung. Bây giờ nó sẽ thực thi mã miễn là YouTube tồn tại và không phải là null, 0 hoặc một chuỗi rỗng. Câu trả lời này có phù hợp với bạn không? – Chango

6

Đây là phiên bản cổ điển.

Sử dụng trình kiểm tra "cửa sổ" để kiểm tra trình duyệt chéo trên các biến không xác định và sẽ không bị hỏng.

if (window.YouTube) { // won't puke 
    // do your code 
} 

HOẶC cho lõi cứng sticklers từ thư viện đậu phộng ...

if (this.YouTube) { 
    // you have to assume you are in the global context though 
} 
+3

Điều đó sẽ không hoạt động nếu bạn ở trong một phạm vi khác. Tôi không khuyên bạn nên làm điều đó. – regality

+0

Có, tôi cũng nên đề cập đến, thực hiện bất kỳ trình độ đối tượng nào dưới dạng gốc nói rằng bạn có một đối tượng "something = {}", sau đó bạn kiểm tra xem "something.x" sẽ không gây rối hay không. Tôi phải làm điều này khi viết các plugin bổ sung như window.myThing = window.myThing || {}; Vân vân.IE là lý do thực sự cho điều này vì IE bị chậm lại, ngay cả ở phiên bản 9. –

+0

Vì vậy, nếu var YouTube = EpicKris; không tồn tại thì không có lỗi nào xảy ra và phần còn lại của mã JavaScript sẽ chạy? –

1

gì về việc sử dụng try/catch:

try { 
    //do stuff 
} catch(e) { /* ignore */ } 
+0

Bạn có thể giải thích điều này cho tôi không? –

+0

@KristianMatthews: Xem phần này: http://jsfiddle.net/BGurung/deRvV/3/ –

+0

Cách tiếp cận này hoạt động ở mọi nơi nhưng nó tương đương với câu nói "Tôi không biết cách này hoạt động nên tôi sẽ đưa vào một số mã ở đó ". Điều này nên được thực hiện khi bạn biết điều gì đó có thể không thành công dựa trên người dùng hoặc mạng hoặc điều gì đó ngoài tầm kiểm soát của bạn trong hầu hết các trường hợp. Thông thường không phải những thứ mà bạn hiểu tại sao chúng phá vỡ và nằm trong tầm kiểm soát của bạn. –

0

Tôi tin rằng đây là những gì bạn có thể tìm kiếm:

if (typeof(YouTube)!=='undefined'){ 
    if (YouTube!==undefined && YouTube!==null) { 
     //do something if variable exists AND is set 
    } 
} 
0

thật dễ dàng ... bạn có thể làm điều đó trên 2 cách

var YouTube = window["EpicKris"] ;// or this["EpicKris"] or objectContainer["EpicKris"] 

if(YouTube) { //if is null or undefined (Zero and Empty String too), will be converted to false 

    console.log(YouTube);// exists 

}else{ 

    consol.log(YouTube);// null, undefined, 0, "" or false 

} 

hoặc bạn có thể

var YouTube = window["EpicKris"] ;// or this["EpicKris"] or objectContainer["EpicKris"] 

if(typeof YouTube == "undefined" || YouTube == null) { //complete test 

    console.log(YouTube);//exists 

}else{ 

    console.log(YouTube);//not exists 

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