JavaScript no tiene punteros como en C o C++, pero sí se puede simular su comportamiento usando objetos y referencias. En JavaScript, los objetos se pasan por referencia, lo que significa que si modificas una propiedad del objeto dentro de una función, el cambio se refleja afuera.
Veamos un ejemplo:
function incrementar(valor) {
valor.numero++;
}
let puntero = { numero: 10 };
incrementar(puntero);
console.log(puntero.numero); // 11
Aquí puntero simula un puntero: su campo numero puede ser modificado por funciones.
Se pasa la referencia al objeto, no una copia.
Otra forma es con arreglos para simular puntero a variables primitivas
function setValor(arr, nuevoValor) {
arr[0] = nuevoValor;
}
let x = [5];
setValor(x, 42);
console.log(x[0]); // 42
x es un arreglo de un solo elemento. Se comporta como una caja que puede modificarse dentro de funciones.
Esto puede verse como una simulación de un int* en C++.
Veamos un ejemplo sin utilizar funciones:
let a = { valor: 10 };
let b = a; // b apunta al mismo objeto que a
b.valor = 99;
console.log(a.valor); // 99
console.log(b.valor); // 99
a y b apuntan al mismo objeto.
Cambiar b.valor también afecta a.valor.
También se puede utilizar arreglos:
let x = [42];
let y = x;
y[0] = 100;
console.log(x[0]); // 100
console.log(y[0]); // 100
En JavaScript, los valores primitivos (números, strings, booleanos, etc.) se pasan por valor, pero los objetos y arrays se pasan por referencia y podemos utilizarlos para simular punteros.