Middle
Por que é possível aceder a uma string primitiva em JavaScript como se fosse um objeto?
sobes.tech IA
Resposta da IA
No JavaScript, ao aceder a uma cadeia primitiva string (não String), ocorre uma conversão automática (boxing/embalagem) para um objeto envolvente String. Este é um objeto temporário que contém métodos e propriedades acessíveis às cadeias (por exemplo, .length, .toUpperCase(), .indexOf()). Após a operação, este objeto temporário é destruído.
Por exemplo:
// cadeia primitiva
const myString = "hello";
// Acesso à propriedade .length na cadeia primitiva
// Ocorre uma embalagem automática num objeto String { "hello" }
// Depois, é chamado o método .length neste objeto temporário
console.log(myString.length); // 5
// Acesso ao método .toUpperCase() na cadeia primitiva
// Ocorre uma embalagem automática num objeto String { "hello" }
// Depois, é chamado o método .toUpperCase() neste objeto temporário
console.log(myString.toUpperCase()); // "HELLO"
// Após a operação, o objeto temporário é destruído.
// myString continua a ser uma cadeia primitiva.
console.log(typeof myString); // "string"
Este comportamento facilita o trabalho com tipos primitivos, permitindo usar uma sintaxe orientada a objetos para aceder à sua funcionalidade, sem necessidade de criar explicitamente objetos de embalagem.
Comparação entre uma cadeia primitiva e um objeto String:
| Característica | Cadeia primitiva ("string") |
Objeto String (new String("string")) |
|---|---|---|
| Tipo | string |
object |
Comparação com === |
Por valor | Por referência |
| Geral | Mais eficiente | Menos eficiente |
| Uso | Preferido | Evitar, a menos que seja explicitamente necessário |