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

  • 2ndfloor91

    2ndfloor91

    17 Kasım 2007
  • HTC Tutorials

    HTC Tutorial

    21 EYLÜL 2010
  • Phandroid

    Phandroid

    26 Ocak 2009