Bli inte mystified av det faktum att sträng, nummer och booleska bokstäver kan behandlas som ett objekt med egenskaper (t.ex.., true.toString ()
). När dessa primitiva värden behandlas som objekt genom att försöka få åtkomst till deras egenskaper skapar JavaScript ett wrapperobjekt från primitivens tillhörande konstruktör så att egenskaperna och metoderna för omslagets objekt kan nås.
När egenskaperna har nåts, kasseras omslaget. Denna omvandling tillåter oss att skriva kod som skulle få det att verka som om ett primitivt värde faktiskt var ett objekt. Sanningen berättas, när det behandlas som ett objekt i kod, kommer JavaScript att konvertera det till ett objekt så egenskapsåtkomst kommer att fungera och konvertera sedan det till ett primitivt värde när ett värde returneras. Det viktigaste att märka här är vad som händer, och det gör JavaScript för dig bakom kulisserna.
Här är några exempel på att visa vad jag pratar om:
Strängprov: sample56.html
Antal prov: sample57.html
Booleskt prov: sample58.html
När du åtkomst till en egenskap på ett primitivt tal direkt (inte lagrat i en variabel) måste du först värdera numret innan värdet behandlas som ett objekt (t.ex.., (1) .toString ();
eller 1 ... toString ();
). Varför två prickar? Den första punkten anses vara ett numeriskt decimaltal, inte en operatör för att komma åt objektegenskaper.
De bokstavliga / primitiva värdena som representerar en sträng, ett tal eller en booleska är snabbare att skriva och är mer kortfattade i bokstavsform.
Du borde använda det bokstavliga värdet på grund av detta. Dessutom, noggrannheten hos sorts
Operatören beror på hur du skapar värdet (bokstavligt kontrakonstruktion). Om du skapar en sträng, ett tal eller ett booleskt objekt, kommer sorts
Operatören rapporterar typen som ett objekt. Om du använder bokstäver, sorts
operatören returnerar ett strängnamn av den aktuella värde typen (t.ex.., typof 'foo' // returnerar 'sträng'
).
Jag demonstrerar detta i följande kod.
Prov: sample59.html
Om ditt program beror på sorts
operatör för att identifiera sträng-, nummer- eller booleska värden i termer av de primitiva typerna, bör du undvika Sträng
, siffra
, och Boolean
konstruktörer.