Translate

lunes, 5 de mayo de 2025

Simular punteros en Javascript


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.