JavaScript'te bir şeyin tanımlanmamış olup olmadığını test edin


Yanıtlar:


344

response[0] tanımlı değilse, tanımlı olup olmadığını kontrol edin ve ardından özellik başlığını kontrol edin.

if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
    //Do something
}

20
Oyların sayısına rağmen, bu undefinedbir JavaScript anahtar kelimesi olmadığı için (herkes öyle olduğunu düşünüyor olsa da) kontrolü gerçekleştirmek için iyi bir yol değildir. İsterseniz, adlı bir değişken oluşturabilirsiniz undefinedve bu onay yanlış olur. Tek doğru yol kontrol etmektir (typeof myVar !== 'undefined').
BadHorsie

4
@BadHorsie mantıklı, cevabınızı yorumunuzla güncelledim.
amosrivera

1
Bir değişken varsa ve 'tanımsız' yazan dize içeriyorsa ne olur?
TomeeNS

1
@BadHorsie Argümanınız sahte. Neden yeniden tanımlamalıyım undefined?
Robert Siemer

1
@amosrivera Hayır, yorumu anlamlı değildi. Cevabınızı kötüleştirdiniz.
Robert Siemer

40

response[0]Tanımsız olup olmadığını kontrol edin :

if(response[0] !== undefined) { ... }

Başlığı hala açıkça kontrol etmeniz gerekiyorsa, bunu ilk kontrolden sonra yapın:

if(response[0] !== undefined && response[0].title !== undefined){ ... }

35

Yukarıdaki diğer kod örnekleri ile sorun yaşadım. Chrome'da benim için çalışan durum buydu:

typeof possiblyUndefinedVariable !== "undefined"

Bunu diğer tarayıcılarda test etmem ve her şeyin nasıl gittiğini görmem gerekecek.


2
Aynı - undefinedBir dize olması gerektiğini buldum .
remarsh

bu chrome ile yeni bir şey olmalı (win chrome 41 atm'deyim). kabul edilen cevap iyi çalışırdı! : P
joe

13

Aslında kodunuzun çalışmasını durdurmak için bir Try / Catch bloğu ile çevrelemeniz gerekir. Bunun gibi:

try{
    if(typeof response[0].title !== 'undefined') {
        doSomething();
    }
  }catch(e){
    console.log('responde[0].title is undefined'); 
  }

IE 8 arıyordum ve denemek yakalamak yapmak gerekiyordu.
RonanOD

1
bir işlevin tanımsız olup olmadığını test ediyorsanız bu en iyi yoldur
edepperson

undefined'i kontrol etmek için bir hata atmak iyi bir çözüm değildir. @ amosrivera en iyi çözümdür.
user3658423

@ user3658423: Bir hata atmıyor. Komut dosyası yalnızca yanıt bildirilmezse durur (çünkü bu bir hata verir).
André Luiz

Bazen hatalar yardımcı olabilir. Önerilen çözümünüzle, doSomething () bir istisna atarsa, konsolunuzda gördüğünüz tek şey xyz dosyasının "yakalanmayan istisna @ satırı 123 hakkında yararlı bir mesaj yerine" responde [0] .title tanımlanmamıştır " js". Sonunda, ikinci bir geliştirici muhtemelen console.log () ifadesini yorumlayarak 3. geliştiricinin gelmesini ve doSomething () içinde derin bir hatayı çözmesini zorlaştıracaktır.
Eric Seastrand




0

response[0]Gerçekten var olup olmadığınızı kontrol edin , hata öyle olmadığını gösteriyor.


0

Önce response[0]tanımsız olup olmadığını kontrol etmelisiniz ve sadece değilse geri kalanını kontrol etmelisiniz. Bu, sizin durumunuzda response[0]tanımsız olduğu anlamına gelir .


0

Buraya 7 ay geç gittiğimi biliyorum, ama bu soruları buldum ve ilginç görünüyor. Bunu tarayıcı konsolumda denedim.

try{x,true}catch(e){false}

X değişkeni tanımsızsa, hata yakalanır ve false olur, eğer değilse, true değerini döndürür. Böylece değeri bir değişkene ayarlamak için eval işlevini kullanabilirsiniz.

var isxdefined = eval('try{x,true}catch(e){false}')

1
Kendimi söyleseydim ilginç bir yaklaşım.
Brandito

0

Bu cevapların bazılarında nasıl kullanılacağı hakkında temel bir yanlış anlama vardır typeof.

Yanlış

if (typeof myVar === undefined) {

Doğru

if (typeof myVar === 'undefined') {

Bunun nedeni typeofbir dize döndürmesidir. Bu nedenle, bunu yerine "tanımsız" dizesini döndüğünü kontrol edilmelidir undefinedbiri kendisidir (tırnak içinde değil), JavaScript'in ilkel türleri . typeofOperatör türünde bir değer döndürmez asla undefined.


ek

Yanlış karşılaştırmayı kullanırsanız kodunuz teknik olarak işe yarayabilir, ancak büyük olasılıkla düşündüğünüz nedenle kullanılamaz. undefinedJavaScript'te önceden var olan bir değişken yoktur - bir şeyleri karşılaştırabileceğiniz bir tür sihirli anahtar kelime değildir. Aslında adlı bir değişken oluşturabilir undefinedve ona istediğiniz herhangi bir değeri verebilirsiniz.

let undefined = 42;

Ve ilk yöntemin yanlış olduğunu kanıtlamak için bunu nasıl kullanabileceğinize bir örnek:

https://jsfiddle.net/p6zha5dm/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.