Bir değişkenin 'tanımsız' veya 'boş' olup olmadığını nasıl belirleyebilirim?


2129

Değişkenin undefinedya da olup olmadığını nasıl belirleyebilirim null?

Kodum aşağıdaki gibidir:

var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
  // DO SOMETHING
};
<div id="esd-names">
  <div id="name"></div>
</div>

Ancak bunu yaparsam JavaScript yorumlayıcısı yürütmeyi durdurur.


Yanıtlar:


2848

Bunu yapmak için soyut eşitlik operatörünün niteliklerini kullanabilirsiniz :

if (variable == null){
    // your code here.
}

Çünkü null == undefineddoğrudur, yukarıdaki kod hem yakalayacak nullve undefined.


5
Olayın firefox'ta null olup olmadığını ve bir hatanın yürütülmesini engellediğini test etmeye çalışıyorum: "event undefined"
Entretoize

3
@MichaelFever Bu nasıl çalışmıyor? const y = undefined; y == null;Bunu konsolunuza yapıştırın: Geri dönmelitrue
Seraf

2
@ChrisStryczynski Örneğin yorumunuzda ysabit beyan ettiniz , ancak karşılaştırma yapıyorsunuz abc(değil y). Ben test ettiğimizde yaracılığıyla console.log(y == null);üzerindeki Chrome ve Firefox aldığım truesonuç olarak. Hata alıyorsanız , yeniden atanamayacağınız için hata döndürmek mantıklı olacak =karşılaştırma yerine atama operatörünü kullanmaya çalıştınız . ==const
Pshemo

2
ilgili karşılaştırmaların canlı örneği . LGTM.
Ryan Haining

2
@ZaytsevDmitry bir değişkenin neden test yapmasını nullveya undefineddeğişkenin eşit olması durumunda geçilmesini beklersiniz 0? Soru doğru bir değeri test etmekle ilgili değil, nullya da açık bir şekilde test etmekle ilgilidir undefined.
rodrigo-silveira

1107

Yakalamanın nullve undefinedeşzamanlı olarak standart yol şudur:

if (variable == null) {
     // do something 
}

- hangi daha açık ama daha az özlü% 100 eşdeğer:

if (variable === undefined || variable === null) {
     // do something 
}

Profesyonel JS yazarken, o hafife almış tip eşitlik ve davranışları ==vs=== anlaşılmaktadır. Bu nedenle ==sadece kullanırız null.


Tekrar düzenle

Kullanımını öneren yorumlar typeofsade yanlış. Evet, değişkenim yoksa yukarıdaki çözümüm ReferenceError hatasına neden olur. Bu iyi birşey. Bu ReferenceError arzu edilir: kodunuzu göndermeden önce hatalarınızı bulmanıza ve düzeltmenize yardımcı olacaktır, tıpkı derleyici hatalarının diğer dillerde olduğu gibi. Kullanım try/ catchGirilecek ile çalışıyorsanız eğer üzerinde kontrole sahip değildir.

Kodunuzda bildirilmemiş değişkenlere referansınız olmamalıdır.


47
Bu, kodda değişken tanımlanmadığı veya hiç başvurulmadığı durumlarda bir ReferenceError hatasına neden olur ve typeof kullanmak daha güvenlidir.
14'te Mani Gandham

56
Bu daha çok stilistik bir nokta. Değişken en beyan edilmemişse tüm bu yazarın adına gerçekten sadece kötü bir yazı bu. Değişkeninizin bildirilip bildirilmediğini bilmelisiniz, bu bir soru olmamalıdır. Ancak evet , eğer herhangi bir nedenden ötürü , bu sadece bir değişken yerine window.variable olarak değiştirilmelidir , bu da referans hatasına neden olmaz. Bunlardan kaçınılmalıdır.
temporary_user_name

6
Evet yazdığı için !==yerine !=.
temporary_user_name

9
-OP: Bu karşılaştırmalar için "% 100 eşdeğeri" ifadesi SADECE YANLIŞ, kendi DÜZENLEMEDE belirttiğiniz gibi, ikincisi ReferenceError neden olur. İddiaya gelince: "Kodunuzda bildirilmemiş değişkenlere referansınız olmamalıdır." GERÇEKTEN Mİ? Hiç İsteğe Bağlı Parametreleri duydunuz mu? jsfiddle.net/3xnbxfsu
Timothy Kanski

16
@TimothyKanski isteğe bağlı parametreleri, isteğe bağlı olarak sağlanmadıysa tanımsız olabilir, ancak bunlar kesinlikle bildirilen değişkenlerdir. Belirtilen undefinedancak başlatılmamış herhangi bir değişkenin yaptığı gibi bildirilir ve değeri vardır , yani var someVar;argümanınız gerçekten geçerli olmaz
chiliNUT

227

Yukarıdaki cevapları birleştirerek, en eksiksiz cevap şöyle görünecektir:

if( typeof variable === 'undefined' || variable === null ){
    // Do stuff
}

Bu, bildirilmemiş veya beyan edilmiş ve açıkça null veya undefined olarak ayarlanmış herhangi bir değişken için çalışmalıdır. Boole ifadesi, gerçek null olmayan bir değere sahip bildirilen herhangi bir değişken için false olarak değerlendirilmelidir.


2
@Aerovistae typeofBir işleç değil, bir işleç olduğunu biliyorum , bu nedenle parantezlere gerek yok, ancak yine de parantezleri takdir ediyorum - sadece netlik okumak için.
user664833

1
typeof kullanmak yerine (değişken === tanımsız) doğrudan kontrol etmeye ne dersiniz?
Frozen Crayon

2
@ArjunU, değişken bildirilmezse ReferenceError'a neden olur. Bir değişkenin bildirilip bildirilmediğini bilmiyorsanız yukarıdaki çözümü kullanın. Değişkenin en azından bildirildiğini garanti edebiliyorsanız, kullanabilirsinizvariable == null
Rogue

3
@Rogue'un işaret ettiği gibi, değişken beyan edilmeyebilir, çünkü bu daha iyi bir çözümdür.
Abdul Sadik Yalçın

Yanılıyorsam beni düzeltin, ama ilk koşul ikincisinin üst kümesi değil ve bu nedenle ikinci koşul gereksiz mi?
Mart Ho

186
if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}

14
Herhangi birinin bunun başka bir yarı cevap olduğunu düşünmesi durumunda, bu gerçekten işe yarıyor. undefinedeşit olarak değerlendirir null.
Chuck

3
Chrome konsolunda bana başarısız oldu ... ReferenceError: değişken tanımlanmadı, bu yüzden işe yarayabilir, ancak benim için değil ...
Eran Medan

48
Sadece bildirilen değişkenler için çalışır, bildirilebilen veya bildirilemeyen değişkenler için değildir, nadiren durum söz konusudur. (

11
Sadece bu yorumu ekleyebileceğinizi anladım : /*jshint eqnull:true */JS belgenizin veya işlevinizin üstüne ve JSHint, kullanımınız hakkında sizi uyarmayı durduracak == null.
Web_Designer

3
@Avista, beni açıkça ==bozuk olduğunu belirten bir referansa yönlendirebilir misiniz ? if(variable == null)Bu cevaptaki zorlama benim için tam anlamıyla mantıklı ...
Ben Aston

93
if (typeof EmpName != 'undefined' && EmpName) {

değer değilse doğru olarak değerlendirilir:

  • boş

  • Tanımsız

  • NaN

  • boş dize ("")

  • 0

  • yanlış


13
Bence bu vahşi ateş gibi yayılmış tehlikeli bir teknik. Çünkü kontrol edilen değişkenlerin çoğu boolean veya sayı olabilir. Kullanıcı sonuçları tam olarak anlamıyorsa, bu iyi değildir.
usefulBee

Lütfen bu javascript özelliklerinden bir referans sağlayın
villamejia

1
Bu ile aynı if (EmpName). Eğer undefinedzaten sahte olacaksa.
Rudy

1
Değişken tanımlanmamışsa. (EmpName) hata
verirse

1
@Thamaraiselvam Sanırım Rudy bunu kast etmiş olabilir var EmpName; if (EmpName). Değişkenin tanımlandığı ancak bir değer atanmadığı yer.
hungerstar

27

jQuery attr()işlevi boş bir dize veya gerçek değer döndürür (ve asla nullveya undefined). Geri döndüğü undefinedtek zaman, seçicinizin herhangi bir öğe döndürmediği zamandır .

Böylece boş bir dizeye karşı test etmek isteyebilirsiniz. Alternatif olarak, boş dizeler, null ve undefined yanlış-y olduğundan, bunu yapabilirsiniz:

if (!EmpName) { //do something }

1
Krom 17.0.963.78 m bu hatayı veriyor:ReferenceError: EmpName is not defined
Eran Medan

6
@EranMedan Bunun geç olduğunu biliyorum, ama umarım buraya daha sonra gelen insanlara yardım eder. Bir hata almanızın nedeni, hiç bildirilmemesidir. Genellikle EmpName (veya başka bir değişken) bir işleve veya başka bir işlevin dönüş değerine geçirilir ve bu nedenle bildirilir (Örnek: "var x;"). Undefined, null veya blank string döndürüp döndürmediğini test etmek için yukarıdaki çözümü kullanabilirsiniz.
Dave

Bunun soğuk bir soru olduğunu anlıyorum, ancak jQuery undefinedözniteliğin öğe üzerinde bulunmaması durumunda dönecektir (yalnızca seçicinin cevaba göre eşleşen öğe yoksa değil). Örneğin, bir imghayır ile srcdönecekti undefinediçin$('img').attr('src');
codinghands

19

Bunun için kendi fonksiyonumu yazmaya geldim. JavaScript tuhaf.

Kelimenin tam anlamıyla her şeyde kullanılabilir. (Bu değişkenin kullanılabilir herhangi bir değer içerip içermediğini de kontrol eder . Ancak bu bilgi genellikle gerekli olduğundan, yayınlanmaya değer olduğunu düşünüyorum). Lütfen not bırakmayı düşünün.

function empty(v) {
    let type = typeof v;
    if (type === 'undefined') {
        return true;
    }
    if (type === 'boolean') {
        return !v;
    }
    if (v === null) {
        return true;
    }
    if (v === undefined) {
        return true;
    }
    if (v instanceof Array) {
        if (v.length < 1) {
            return true;
        }
    } else if (type === 'string') {
        if (v.length < 1) {
            return true;
        }
        if (v === '0') {
            return true;
        }
    } else if (type === 'object') {
        if (Object.keys(v).length < 1) {
            return true;
        }
    } else if (type === 'number') {
        if (v === 0) {
            return true;
        }
    }
    return false;
}

Typescript uyumlu.


Bu işlev yapmalıdır aynen PHP'nin gibi aynı şeyi empty()fonksiyonu (bkzRETURN VALUES )

Düşünüyor undefined, null, false, 0, 0.0, "0" {}, []olarak boşaltın.

"0.0", NaN, " ", trueBoş olmayan olarak kabul edilir.


2
Biraz boş kontrol problemi ile karşılaştım. İletilen bir parametrenin boş olup olmadığını veya boş bir nesne olup olmadığını kontrol etmek istiyorum { }. Bu yaygın ve aptalca bir dil sorunu, ama unutmuştum. Tüm aramalarım, null değerin veya gevşek eşitlik karşılaştırmalarının (==) tanımsız olduğunu gösteriyor, ancak katı eşitlik (===) veya eşdeğeri değil. Ve sonra , sayfanın en altındaki -1 dereceli cevabınızda (kaldırmadan önce) beni atlayan cevap. Object.keys( obj ).length < 1veya belki === 0, asla -1 olmayacağını varsayarsak. Her neyse, 0'a yükseltildi, woo. : p

Teşekkürler, bu işlevi bırakıp birçok kodu temizleyebildim. Bu neden standart bir JS işlevi değil, beni aşıyor.
Andy

3
Sen değişmelidir tüm senin içinde ==hiç ===Buraya, daha sonra bu makul bir fonksiyonu olacaktır.
Ben McIntyre

12

Kontrol etmek istediğiniz değişken globalse,

if (window.yourVarName) {
    // Your code here
}

Bu şekilde kontrol etmek, yourVarNamedeğişken olmasa bile bir hata atmaz.

Örnek: Tarayıcımın Geçmiş API'sını destekleyip desteklemediğini bilmek istiyorum

if (window.history) {
    history.back();
}

Bu nasıl çalışır:

windowtüm global değişkenleri özellikleri olarak tutan bir nesnedir ve JavaScript'te var olmayan bir nesne özelliğine erişmeye çalışmak yasaldır. Eğer historyo zaman mevcut değil window.historydöner undefined. undefinedfalsey olduğundan, bir if(undefined){}bloktaki kod çalışmaz.


2
Okuyucular, böyle bir yaklaşımın, bir tarayıcıda çalışan JavaScript'ten - genel bir değişkenin bildirilip bildirilmediğini ve özellikle tarayıcı tarafından sağlanan bir global (geçmiş API'si gibi) olup olmadığını kontrol etmek için deyimsel olduğunu belirtmelidir . Bu çalışma olmayacak olmayan bir genel değişken olup olmadığını kontrol etmek için nullya undefined, ne JavaScript (node.js yani) bir tarayıcı dışında çalışıyorsa o iş olacak. Aynı zamanda tedavi globaller ayarlı olacak 0, falseya ''bildirilmeyen veya hangi aynı undefinedveya nullgenellikle ince olan.
Mark Amery

Bu, komut dosyasının bir tarayıcıda çalıştığını varsayar. Bu belli değil.
GreenAsJade

12

En kısa ve en kolay:

if(!EmpName ){
 // DO SOMETHING
}

EmpName:

  • boş
  • Tanımsız
  • NaN
  • boş
  • dize ("")
  • 0
  • yanlış

3
Burada örnek olay tanımsız ve yanlış arasındaki farkı bilmek istiyorum olmasıdır. O zaman null üzerinde kontrol kullanacağım.
gast128

11

Muhtemelen bunu yapmanın en kısa yolu:

if(EmpName == null) { /* DO SOMETHING */ };

İşte kanıt:

Ve burada daha fazla ayrıntı ==(kaynak burada )

Resim açıklamasını buraya girin

BONUS : neden ===daha açık ==( neden agc cevabına bakın )

Resim açıklamasını buraya girin


8

Ben sadece bu nesne yani bir nesnenin boş olup olmadığını kontrol ettik.
Ben sadece bunu kullanın:

if (object) {
    // Your code
}

Örneğin:

if (document.getElementById("enterJob")) {
    document.getElementById("enterJob").className += ' current';
}

3
(A) A.className + = 'current' ise var A = document.getElementById ("enterJob") öğesini ayarlamak daha iyi olur; bu şekilde aynı sonuç için% 50 iş yaparsınız ... Ama belki de sadece şovlar için yaptınız ve sonra selamlıyorum.
Harry Svensson

7

JQuery kullandığınızdan , bir değişkenin tanımsız olup olmadığını veya değerinin boş olup olmadığını tek bir işlev kullanarak belirleyebilirsiniz.

var s; // undefined
jQuery.isEmptyObject(s); // will return true;

s = null; // defined as null
jQuery.isEmptyObject(s); // will return true;

// usage
if(jQuery.isEmptyObject(s)){
    alert('Either variable: s is undefined or its value is null');
}else{
     alert('variable: s has value ' + s);
}

s = 'something'; // defined with some value
jQuery.isEmptyObject(s); // will return false;

Bu benim için işe yaramadı. Hala hatayla karşılaştım: ReferenceError: s is not definedilk örnek için.
Mark

5

jQuery kontrol öğesi boş değil:

var dvElement = $('#dvElement');

if (dvElement.length  > 0) {
    // Do something
}
else{
    // Else do something else
}

4

JavaScript'te, bildiklerime göre, aşağıdaki gibi tanımlanmamış, boş veya boş bir değişkeni kontrol edebiliriz.

if (variable === undefined){
}

if (variable === null){
}

if (variable === ''){
}

Tüm koşulları kontrol edin:

if(variable === undefined || variable === null || variable === ''){
}

varayrılmış bir kelimedir, bu atılacaktırSyntaxError
dhilt

4

Sadece aşağıdakileri kullanabilirsiniz (Bunu yapmanın daha kısa yolları olduğunu biliyorum, ancak bu en azından koda bakarak diğerleri için görsel olarak gözlemlemeyi kolaylaştırabilir).

if (x === null || x === undefined) {
 // Add your response code here, etc.
}

3

Kontrol etmenin en kolay yolu:

if(!variable) {
  // If the variable is null or undefined then execution of code will enter here.
}

1
Değişkenin falsepotansiyel olarak istenmeyen bir değeri varsa, kod yürütülür .
byxor

Soru açıktır "Değişkenin 'tanımsız' veya 'boş' olup olmadığı nasıl belirlenir?" ve javascript'te bir değişken null veya undefined değerine sahipse değeri false olur.
M. Arnold

1
Üzgünüm, ama bu yanlış. İşte bunu kanıtlamak için bir JSfiddle .
byxor

Cevabınız, By undefined, null ve boş bir dize, 0 gibi birkaç diğer şeyler, -0 NaNve falseatlatacağız. !Operatör burada operand- coerces variable- Boolean: ecma-international.org/ecma-262/#sec-toboolean
Alireza

Ancak şu soruyu kontrol edin: "Bir değişkenin tanımsız veya boş olup olmadığı nasıl belirlenir",! if ile kullanılan işlenen değişken null veya undefined ise her zaman true değerine döner.
M. Arnold

2

Aşağıdaki çözümle:

const getType = (val) => typeof val === 'undefined' || !val ? null : typeof val;
const isDeepEqual = (a, b) => getType(a) === getType(b);

console.log(isDeepEqual(1, 1)); // true
console.log(isDeepEqual(null, null)); // true
console.log(isDeepEqual([], [])); // true
console.log(isDeepEqual(1, "1")); // false
etc...

Aşağıdakileri kontrol edebiliyorum:

  • boş
  • Tanımsız
  • NaN
  • boş
  • dize ("")
  • 0
  • yanlış

Bu, "nasıl boş ve tanımsız yakalayabilirim?" Sorusuna cevap vermez. "JavaScript'teki her falsey değerini nasıl yakalarım?"
temporary_user_name

@Avista, konsol.log (isDeepEqual (null, null)) ile yaptığımı sanıyordum; ve console.log (isDeepEqual (tanımsız, tanımsız)); ?
Tony Tai Nguyen

1

Bir değişkenin null veya undefined olup olmadığını test etmek için aşağıdaki kodu kullanıyorum.

    if(typeof sVal === 'undefined' || sVal === null || sVal === ''){
      console.log('variable is undefined or null');
    }

Kapat ama hayır. Bir dizge olarak değil, düz dışarıya gelerek typeofkarşılaştırın undefined. Bu işe yarıyor ama ekstra operatörün daha kötü yapmaktan başka bir etkisi yok.
temporary_user_name

Bu durumda evet haklısınız, typeof kullanmak zorunda değiliz. Ancak tanımlanmamış değişkenlerle uğraşırken typeof kullanmak iyi bir uygulamadır. Typeof kullanmanın bir nedeni, değişken bildirilmemişse bir hata atmamasıdır.
DanKodi

Bu aslında kötü bir şey. Kodunuzda bildirilmemiş değişkenler istemezsiniz. Değişkeni bulabilmeniz ve bildirebilmeniz için bir ReferenceError atmasını istiyorsunuz. Kesinlikle bunu C ++ gibi derlenmiş bir dilde denemezsiniz! JS buna izin verdiği için yapılması gerektiği anlamına gelmez.
temporary_user_name

1
Sizin veya ifadeniz geriye dönük. Bir şeyin tanımsız olduğunu kontrol etmek, ikinci adım değil, ilk adım olacaktır.
Anthony Rutledge

1

Bu testi Chrome konsolunda çalıştırıyorum. (Void 0) kullanarak tanımsız olanları kontrol edebilirsiniz:

var c;
undefined
if (c === void 0) alert();
// output =  undefined
var c = 1;
// output =  undefined
if (c === void 0) alert();
// output =   undefined
// check c value  c
// output =  1
if (c === void 0) alert();
// output =  undefined
c = undefined;
// output =  undefined
if (c === void 0) alert();
// output =   undefined

1

Şuna bakalım,

  1.  

    let apple; // Only declare the variable as apple
    alert(apple); // undefined

    Yukarıda, değişken sadece olarak bildirilmiştir apple. Bu durumda, yöntemi çağırırsak alerttanımsız görüntülenir.

  2.  

       let apple = null; /* Declare the variable as apple and initialized but the value is null */
       alert(apple); // null

İkincisinde null değerini görüntüler, çünkü değişken apple değerini değer null olur.

Böylece bir değerin tanımsız veya boş olup olmadığını kontrol edebilirsiniz.

if(apple !== undefined || apple !== null) {
    // Can use variable without any error
}

0

En iyi yol:

if(typeof variable==='undefined' || variable===null) {

/* do your stuff */
}

6
Bu kesin çözüm zaten Eki 11, 2013 tarihinde @jkindwall tarafından sağlandı stackoverflow.com/a/19323555/2943403 o sayfaya yeni değer katar çünkü bu kod sadece post tamamen işe yaramaz. Aslında, sayfa şişirmesi ekliyor ve araştırmacıları okumaya zaman harcıyor. Lütfen bu yanıtı kaldırın.
mickmackusa

0
(null == undefined)  // true

(null === undefined) // false

Çünkü === hem türü hem de değeri kontrol eder. Her ikisinin türü farklıdır, ancak değer aynıdır.


0
var i;

if (i === null || typeof i === 'undefined') {
    console.log(i, 'i is undefined or null')
}
else {
    console.log(i, 'i has some value')
}

3
Kullanıcı 'tanımsız' kelimesini girerse ne olur?
Chuck

Sorunuz iyi, koşulun doğru olduğunu gösteriyor, böylece normal tanımsız seçeneğini typeof koşuluna değiştirmemiz gerekiyor. @Chuck
KARTHIKEYAN.A

Bu yanlış. typeofasla vermez undefined, sadece ipi verir 'undefined'. Dahası, i == nulleğer zaten doğrudur iolduğu undefinedikinci boole işe yaradı bile gereksiz olacağını, böylece.
temporary_user_name

1
Bu çözüm (koşulların tersine çevrilmiş haliyle) 11 Ekim 2013 tarihinde @jkindwall tarafından zaten sağlanmıştır. Aslında, sayfa şişirmesi ekliyor ve araştırmacıları okumaya zaman harcıyor. Lütfen bu yanıtı kaldırın.
mickmackusa

0

foo == nullÇek hile yapmak ve en kısa şekilde "tanımlanmamış VEYA boş" davayı çözmelidir. ("Foo ilan edilmez" davası dikkate alınmaz.) Ancak 3 eşit değere sahip olan insanlar (en iyi uygulama olarak) kabul etmeyebilir. Sadece eqeqeq'e veya eslint ve tslint'te üçlü eşit kurallara bakın ...

Değişken n olup olmadığını kontrol ederken eklenir açık yaklaşım, undefinedya nullayrı ayrı, bu durumda uygulanır ve konuya katkım (şimdilik 27 negatif olmayan cevaplar!) Kullanmaktır edilmelidir void 0kontrolü gerçekleştirmek için hem kısa hem de güvenli yolu olarak içinundefined .

foo === undefinedUndefined ayrılmış bir sözcük olmadığından ve gölgelenebildiğinden ( MDN ) kullanmak güvenli değildir . Kullanımı typeof === 'undefined'çek güvenlidir ama umurumda gidiş değildir eğer foo-is-bildirilmemiş aşağıdaki yaklaşım kullanılabilir durumda:

if (foo === void 0 || foo === null) { ... }

0

kontrol etmek için bir işlev oluşturursanız:

export function isEmpty (v) {
 if (typeof v === "undefined") {
   return true;
 }
 if (v === null) {
   return true;
 }
 if (typeof v === "object" && Object.keys(v).length === 0) {
   return true;
 }

 if (Array.isArray(v) && v.length === 0) {
   return true;
 }

 if (typeof v === "string" && v.trim().length === 0) {
   return true;
 }

return false;
}

-1

Özel null değeri boş bir nesne başvurusu olarak kabul edildiğinden, typeof null öğesi çağrıldığında bir "object" değeri döndürülür. Safari ile sürüm 5 ve Chrome ile sürüm 7 arasında, diğer tüm tarayıcıların “nesne” döndürürken normal ifadede typeof çağrılması “işlev” döndürülür.


-1
var x;
if (x === undefined) {
    alert ("only declared, but not defined.")
};
if (typeof y === "undefined") {
    alert ("not even declared.")
};

Sadece ikincisini kullanabilirsiniz: hem tanım hem de beyanı kontrol edeceği için


-1

Hala bu iki koşulu test etmenin en iyi / güvenli yolunun bir dizeye değer atmak olduğunu düşünüyorum:

var EmpName = $("div#esd-names div#name").attr('class');

// Undefined check
if (Object.prototype.toString.call(EmpName) === '[object Undefined]'){
    // Do something with your code
}

// Nullcheck
if (Object.prototype.toString.call(EmpName) === '[object Null]'){
    // Do something with your code
}

testlerin yapılmasının neden "en iyi / güvenli yol" olduğuna inandığınızı açıklayabilir misiniz?
sadmicrowave

Dönüşüm her zaman "standartlaştırılmış" bir dize döndürdüğünden (yani, [Tanımlanmamış nesne]), bu nedenle yanlış değerleri test ederek sorun yaşamazsınız. Bu sadece doğruluk / falsi değerleriyle yaşadığım deneyimlere dayanarak benim düşüncem.
n1kkou

Açıklama için teşekkürler. Eleştirmiyorum, ilginç bir cevap, sadece bunun neden diğer yöntemlerden daha üstün olduğu konusunda başkaları için bazı açıklamalar yapmanızı istedim.
sadmicrowave

Telaşa gerek yok! Bu tür karşılaştırmalar ile ilgili birçok sorunum vardı ve şimdiye kadar bu konuda en yararlı yaklaşım olarak görüyorum.
n1kkou

-2

Yalnızca typeof komutunu kullanarak değerin tanımsız veya boş olup olmadığını kontrol edebilirsiniz:

if(typeof value == 'undefined'){

Önceki cevaptaki ( stackoverflow.com/a/21273362/6305294 ) türlerle ilgili yorumlara bakın .
Alex

4
Bu yanlış. Yakalamıyor null. Yıllar önce doğru ve eksiksiz bir cevap verilen bir soruya neden yeni, yanlış cevaplar verildiğini anlamıyorum. Mevcut cevapların bir şekilde yetersiz olduğunu düşünüyor musunuz?
temporary_user_name

-4

if(x==null)JavaScript'te kötü bir fikirdir. Yargıç "=="- bu beklenmedik tip zorlama neden olabilir ve CoffeeScript tarafından okunamaz koşul kararda "! =" Asla kullanma "==" veya!

if(x)daha iyi olur, ancak 0 ve "" ile dikkatli olun . Bu şekilde muamele edilmiş olan yanlış ile değil, aynı yöntem "!= null"olup gerçek .

Resim açıklamasını buraya girin

Bkz. JavaScript En İyi Uygulamaları .


3
Bu tamamen yanlıştır ve herhangi bir profesyonel düzeyde çerçeve veya yazılımın el yazısı çalışması, bunu birkaç dakika içinde doğrulayacaktır. Kullanılması ==karşılaştırmak için nullise yakalama standart yol ve JS. İle Tip zorlama bu özel bağlamda bir risk değildir ve her iki yakalama hedefi gerçekleştirmek için avantaj atılıyor aslında ve aynı anda. Yıllar önce tatmin edici bir şekilde çözülmüş olan sorulara yanlış ve yanıltıcı cevaplar sunmayı seçmeden önce lütfen dil ile çalışmak için daha fazla zaman ayırın. nullundefined==nullundefined
temporary_user_name

"==" kullanmaktan kaçının. Her şey her zaman değişmeye devam ediyor, seninle aynı fikirde değilim @Aerovistae
Albert.Qing

3
Sen karşı çıkmaması bana - tamamını JavaScript kurulması ile katılmıyorum. Açık olalım.
temporary_user_name
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.