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

  • Kyletiv7

    Kyletiv7

    28 Mayıs 2007
  • mist64

    mist64

    30 Mayıs 2006
  • The Platform

    The Platform

    14 HAZİRAN 2006