Mohu přidat vlastnost do řetězce?
důležitost: 5
Uvažujme následující kód:
let řetězec = "Ahoj";
řetězec.test = 5;
alert(řetězec.test);
Co myslíte, bude to fungovat? Co se zobrazí?
Zkuste si to spustit:
let řetězec = "Ahoj";
řetězec.test = 5; // (*)
alert(řetězec.test);
Podle toho, zda máte use strict nebo ne, výsledek může být:
undefined(nestriktní režim).- Chyba (striktní režim).
Proč? Přehrajme si, co se děje na řádku (*):
- Když přistoupíme k vlastnosti proměnné
řetězec, vytvoří se „obal“. - Ve striktním režimu zápis do něj znamená chybu.
- V nestriktním režimu bude operace s touto vlastností provedena, objekt získá vlastnost
test, ale poté „obal“ zmizí, takže na posledním řádku nemářetězecpo této vlastnosti ani stopu.
Tento příklad jednoznačně dokazuje, že primitivy nejsou objekty.
Nelze do nich ukládat další data.