Middle
Dlaczego w JavaScript można odwołać się do literału tekstowego jak do obiektu?
sobes.tech AI
Odpowiedź od AI
W JavaScript, podczas odwoływania się do prymitywnego ciągu znaków string (nie String) następuje automatyczna konwersja (boxing/opakowanie) do obiektu String. Jest to tymczasowy obiekt zawierający metody i właściwości dostępne dla ciągów (np. .length, .toUpperCase(), .indexOf()). Po wykonaniu operacji na tym tymczasowym obiekcie, jest on niszczony.
Na przykład:
// prymitywny ciąg znaków
const myString = "hello";
// Dostęp do właściwości .length na prymitywnym ciągu
// Automatyczne opakowanie w obiekt String { "hello" }
// Następnie wywoływana jest właściwość .length tego tymczasowego obiektu
console.log(myString.length); // 5
// Wywołanie metody .toUpperCase() na prymitywnym ciągu
// Automatyczne opakowanie w obiekt String { "hello" }
// Następnie wywoływana jest metoda .toUpperCase() tego tymczasowego obiektu
console.log(myString.toUpperCase()); // "HELLO"
// Po wykonaniu operacji tymczasowy obiekt jest niszczony.
// myString pozostaje prymitywnym ciągiem znaków.
console.log(typeof myString); // "string"
To zachowanie ułatwia pracę z typami prymitywnymi, pozwalając na korzystanie z składni obiektowej do dostępu do ich funkcji, bez konieczności jawnego tworzenia obiektów opakowujących.
Porównanie prymitywnego ciągu znaków i obiektu String:
| Charakterystyka | Prymitywny ciąg ("string") |
Obiekt String (new String("string")) |
|---|---|---|
| Typ | string |
object |
Porównanie === |
Po wartości | Po referencji |
| Ogólnie | Bardziej wydajny | Mniej wydajny |
| Użycie | Zalecane | Unikać, jeśli nie jest to wyraźnie konieczne |