SORU
21 Mart 2010, Pazar


() değerini, vs olabilirdi Javascript

Javascript her nesne değerini() ve toString() yöntemi. Bu olabilirdi düşünmüştüm. () yöntemi, bir dize dönüştürme için çağrıldığında, çağrılan var, ama görünüşe göre değerini tarafından uydurma.

Örneğin, kodu

var x = {toString: function() {return "foo"; },
         valueOf: function() {return 42; }};
window.console.log ("x=" x);
window.console.log ("x=" x.toString());

baskı olacak

x=42
x=foo

Bu grev benim gibi geriye doğru .. eğer x bir karmaşık sayı, örneğin, isterdim değerini, () bana onun büyüklüğü (sıfır) demektir. özel), ama her zaman istedim dönüştürmek için bir dize isteyeceğim bir şey gibi "bi". Ve olabilirdi aramak istemem() bir dize ima bağlamlarda açıkça.

Bu sadece yoludur.

CEVAP
21 Mart 2010, Pazar


Bunun nedeni ("x=", x) verir "x=değer "x=olabilirdi" şudur." ""Javascript ilk işlenen ilkel değerleri toplar ve sonra da toplama veya birleştirme, her ilkel Türüne göre uygulanmalıdır. eğer karar verir değerlendirirken

Yani, bu işler sence nasıl olur

a   b:
    pa = ToPrimitive(a)
    if(pa is string)
       return concat(pa, ToString(b))
    else
       return add(pa, ToNumber(b))

ve bu gerçekten böyle oluyor

a   b:
    pa = ToPrimitive(a)
    pb = ToPrimitive(b)*
    if(pa is string || pb is string)
       return concat(ToString(pa), ToString(pb))
    else
       return add(ToNumber(pa), ToNumber(pb))

O, olabilirdi, özgün nesneye değerini sonucu için uygulanmaz.

Daha fazla referans için, 11.6.1 The Addition operator ( ) ECMA bölümünde Dil Seçenekleri göz atın.


Dize bağlamında, ToPrimitive denir*yokçağırmak olabilirdi, ama burada durum bu değil, çünkü " her tür zorunlu değil içerik.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Friday NightFort

    Friday Night

    15 EYLÜL 2011
  • MarinaHD2001

    MarinaHD2001

    7 ŞUBAT 2009
  • taliajoy18

    taliajoy18

    12 Temmuz 2011