Perché è probabile che le implementazioni del linguaggio utilizzino tipi primitivi come tipi valore piuttosto che tipi riferimento . Cioè, quando assegni un valore a una nuova variabile, piuttosto che modificare la variabile in modo tale che a contiene un riferimento allo stesso oggetto utilizzato nell'espressione sorgente, potrebbe copiare il valore di quell'oggetto nella variabile (se conosci C # , pensa al diverso tra struct
e class
). Un tale valore quindi non potrebbe essere usato sensibilmente come parte di un debole sistema di riferimento, poiché non vi è alcun oggetto da raccogliere (solo valori che vengono copiati) e quindi la rimozione della chiave debole non si innescherà mai.
L'uso di valori piuttosto che riferimenti per questi tipi di dati comuni è un'ottimizzazione che può produrre sostanziali miglioramenti delle prestazioni, e quindi gli sviluppatori di ECMAscript avrebbero dovuto evitare di aggiungere funzionalità che non potevano essere utilizzate.
Se hai bisogno di usare un oggetto del genere, puoi semplicemente creare un oggetto contenitore (solitamente chiamato "scatola") per mantenere il valore e permetterne l'uso in contesti in cui sono consentiti solo riferimenti.