SORU
8 HAZİRAN 2012, Cuma


Neden ("deneme" === new String("deneme")) JavaScript yanlış değerlendirmesi?

String değerleri karşılaştırırken === (üçlü, sıkı karşılaştırma eşittir) kullanarak her zaman başlatmak için gidiyordu, ama şimdi görüyorum

"foo" === new String("foo")

yanlış, ve bu da aynı

var f = "foo", g = new String("foo");
f === g; // false

Tabii ki:

f == g; // true

Bu yüzden her zaman tavsiye == dize karşılaştırma için, ya da her zaman karşılaştırma önce dizelere değişkenleri dönüştürmek için mi kullanacaksın?

CEVAP
8 HAZİRAN 2012, Cuma


"foo" bir dizeilkel. (bu kavramı C yok# ya da Java)

new String("foo") kutulu string nesne.

=== operatör behaves differently on primitives and objects.
Karşılaştırma ilkel (aynı türden), === eğer ikisi de aynı değere sahip ise true döndürür.

Nesne aynı nesne (referans ile karşılaştırma) ifade ederse yalnızca doğru döndürecektir karşılaştırırken. Böylece, new String("a") !== new String("a").

, === sizin durumunuzda döner işlenen farklı türleri vardır çünkü yanlış (bir ilkel ve başka bir nesne).


İlkel tüm nesneler değildir.
typeof operatör temel öğeler için "object" döndürmez.

Bir ilkel bir özellik (bir nesne olarak kullanarak) erişmeye çalıştığınızda, Javascript dili bir nesne için yeni bir nesne her zaman oluşturma kutusu. Bu specification açıklanmıştır.

Bu temel öğeler koymak özelliklerini kullanamazsınız nedeni budur:

var x = "a";
x.property = 2;
alert(x.property) //undefined

Her zaman x.property bir yazarsınızfarklıString kutulu nesne oluşturulur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • newport83

    newport83

    19 HAZİRAN 2006
  • TVNorge

    TVNorge

    5 EKİM 2006
  • Vladimir Jenko

    Vladimir Jen

    1 Mart 2010