2010-03-28 16 views
7

Bazı bu zararlı JavaScript hattı deneme yapıyorum: var undefined = true;var undefined = true;

JavaScript Her başlatılmamış değişken 'undefined' özel değerini tutan bir değişkendir undefined değerini vardır, bu yüzden şu alert yürütmek olmalıdır:

var undefined = true, 
    x; 

if (x) { 
    alert('ok'); 
} 

Ama sorun değil, benim sorum neden bu?

var undefined = true, 
    x = undefined; 

if (x) { 
    alert('ok'); 
} 

Bu kez alert yürütüldüğünde:

, daha sonraki denemeler, ben şu çalıştı. İlk Snippet'te x (o başlatılmadı nedeniyle), neden alert yürütülmediği undefined tutan beri

Yani benim sorum ...? Garip olan ... açıkça xundefined (x = undefined) olduğunun belirtilmesi, alert infaz olmasıdır

cevap

17

undefined adlı bir değişken ile undefined adı verilen değer arasında fark vardır. Bu örnekte

var undefined = true, 
    x; 

, değişken undefined değeri (değil değişken!) undefined için değerli true ve x ayarlanır. Bu örnekte
var undefined = true, 
    x = undefined; 

değişken undefined da değeri true ayarlanır ve x ( true olan) değişken undefined bulunan değere ayarlanır.

Yani, undefined adında bir değişken bildirmekle birlikte, başlatılamayan değişkenlerin undefined değerine ayarlandığı gerçeğini değiştiremezsiniz.

+0

Hehe; 'undefined' değişkeni 'undefined' değeriyse ne olur? – Pindatjuh

+3

@Pindatjuh: değişkenin başka bir adı varsa aynı. Undefined adlı bir değişken hakkında özel bir şey yoktur. – dtb

1

Sadece geçersiz kılma ediyoruz anlamına gelmez "tanımsız" adlı bir değişken bildirerek yerleşik ne kavramına yerel "tanımsız" değeri.

Java'nın bir tanımlayıcı olarak "null" kullanmasına izin vereceğini düşünün. Eh, Java Javascript ile aynı zorlama yok sanırım. Neyse JavaScript ifadesi

if (x) alert("foo"); 

boolean "x" değerinin örtük zorlama içerir. Değer tanımlanmadı, bu nedenle "boolean" için zorlaması false ile sonuçlanır.

+0

@Andreas Grech - Tuhaf bir şekilde, "\ n \ t" == true 'da aslında" false "dir. – JulianR

+0

Gerçekte, JavaScript'teki gerçek kavramı null, undefined, boş '', 'NaN ',' 0' ve 'false' –

0

Başlatılmamış değişkenler undefined özel değerini alır. Bir değişkeni başka bir değişkene atadığınızda, geçerli kapsam içinde tanımladığınız bir değişkene başvuran bir dize vermiş olursunuz. Bu durumda, undefined adında bir değişken tanımladınız, böylece JavaScript motoru ilk önce değişkenler arasında görünecek, bir tane undefined adında bir ad verdiğinizi görün ve sonra bu değişkeni atamalısınız.