SORU
12 Ocak 2010, Salı


Javascript Dize Yazın ve Dize Nesne arasındaki fark?

ECMA-262 standardı ile takılıyorum(ECMAScript Dil Belirtimi, 3rd edition, eğer bunun için önemliyse - 3 ve 5h edition Dize Türü / String Nesne arasında herhangi bir fark bulamadım).

Benim anlamadığım tek bir şey var, Dize Türü ve Dize arasındaki fark, Nesne, evet o anlamda farkı biliyorumDize Türü16 bit dizisi UTF-16 adet veString Nesnebir iç nesne olarak inşa edilmiştirSınıfözelliği ayarlamak için "Dize" ve içDeğerözellik değeri ayarlayınDize Türü.

Ancak şartname okuma, dize türü herhangi bir yöntem, aka göstermek için görünmüyor. herhangi bir ek özellikler olmadan sadece bir değer. Bu kodu alın, her şey beklendiği gibi tam olarak budur

document.writeln(typeof "foo"); // 'string'
document.writeln(typeof new String("foo")); // 'object'

Gerçek ilk yazınDize Türüve ikinciNesne Türü(sınıfın bir nesnesiStringama veri türü nesne). Ancak, buna bakarak:

"foo".charAt(0);

fooStrObj = new String("Foo");
fooStrObj.charAt(0);

İkisi de aynı fonksiyonları ortaya gibi görünüyor, ama işlevleri yokDize TürüECMA-262 standardında tanımlanan, sergiler, tüm fonksiyonları String.prototip nesnesi (ve aslında hiçbir başvuru gördüğüm kadarıylaDize Türüsihirli Dize tüm özellikleri ve işlevleri sunar.ECMA-262 standardında prototip nesne). Öyle tür değerleriDize Türüotomatik olarak terfi ettiString Nesneorijinal ileDize Türübu iç değerDeğerözellik?

Ve eğer tedavi tam olarak aynı gibi görünüyor) neden iki farklı şekilde temsil etmek için yapmakString.

CEVAP
12 Ocak 2010, Salı


Dizeleri JS değer bir türü, herhangi bir özellik eklenmiş, prototip, vb olabilir. Onlara bir özelliğe erişmek için herhangi bir girişim teknik olarak JS performans [[ToObject]] dönüşüm (özünde yeni Dizi).

Kolay yolu belirgin fark (tarayıcıda)

a = "foo"
a.b = "bar"
alert("a.b = "   a.b); //Undefined

A = new String("foo");
A.b = "bar";
alert("A.b = "   A.b); // bar

Süre ayrıca

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

doğrudur, örtük tür dönüşümleri nedeniyle == operatörü doğrudur

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

başarısız olur.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Abe Olandres

    Abe Olandres

    16 EYLÜL 2006
  • Fubar Protocol

    Fubar Protoc

    21 AĞUSTOS 2010
  • theatre2film

    theatre2film

    12 NİSAN 2006