A continuación se muestra una forma típica de verificar si el foco está en un elemento determinado (txtCmd),
if(document.activeElement === txtCmd){ return }Me preocupa que el operador === compare todo el árbol de elementos (cada atributo y cada subelemento) que sería de bajo rendimiento.
¿Simplemente comparar los ID de los elementos es mejor?
document.activeElement.id === txtCmd.idPD: No hay elementos diferentes con ID idénticos en la página.
Editar:
Soy de C++. Quiero algo como la comparación de punteros en C++,
if(&a == &b) {}=== no realiza comparaciones profundas, por lo que no es de bajo rendimiento.
Una alternativa es la función .isSameNode() :
b.isSameNode(a);Editar:
Soy de C++. Quiero algo como la comparación de punteros en C++,
if(&a == &b) {}
Eso es esencialmente lo que == y === hacen en JavaScript cuando se prueba la igualdad de 2 objetos.
Los operadores de calidad de JavaScript comparan objetos por referencia si los operandos son ambos objetos. a == b y a === b son true solo si tanto a como b hacen referencia al mismo objeto.
Si compara objetos, el operador === realizará una comparación de referencia, por lo que solo devolverá verdadero si ambos operandos apuntan al mismo objeto.
No le costará más actuaciones, pero no es lo mismo que comparar valores literales de propiedades.
Para una comparación profunda "por valor" entre objetos, === no funciona. Tendría que usar una entrada recursiva por comparación de entrada, o comparar versiones en cadena de los objetos.
Ejemplo
const o1 = {"a":1}; const o2 = {"a":1}; const o3 = o1; console.log(o1 === o2); // false console.log(o1 === o3); // true console.log(JSON.stringify(o1) === JSON.stringify(o2)) // true