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

  • GoogleTechTalks

    GoogleTechTa

    15 AĞUSTOS 2007
  • ipsy

    ipsy

    1 EKİM 2012
  • merumputdotcom

    merumputdotc

    24 ŞUBAT 2012